如何使用Meteorjs处理URL参数

8

我该如何在Meteor中使用URL参数?

URL可能是这样的:http://my-meteor.example.com:3000?task_name=abcd1234

我想在Meteor应用程序中的MongoDB查询中使用“task_name”(abcd1234)。

例如:

Template.task_app.tasks = function () {
  return Tasks.find({task_name: task_name}); 
};

感谢您的选择。

1
你是否正在使用iron-router? - David Weldon
1个回答

20

您可能需要使用路由器来处理路径并为不同的路径呈现特定的模板。iron-router包是其中最好的一个。如果您还没有使用它,我强烈推荐您使用。

一旦您使用了iron-router,获取查询字符串和URL参数就变得非常简单。您可以在此处查看文档的相应部分:https://github.com/iron-meteor/iron-router/blob/devel/Guide.md#route-parameters

对于您提供的示例,路由将如下所示:

Router.map(function () {
  this.route('home', {
    path: '/',
    template: 'task_app'
    data: function () {
      // the data function is an example where this.params is available

      // we can access params using this.params
      // see the below paths that would match this route
      var params = this.params;

      // we can access query string params using this.params.query
      var queryStringParams = this.params.query;

      // query params are added to the 'query' object on this.params.
      // given a browser path of: '/?task_name=abcd1234
      // this.params.query.task_name => 'abcd1234'
      return Tasks.findOne({task_name: this.params.query.task_name});

    }
  });
});

这将创建一个路由,使用第一个与任务名称匹配的任务作为数据上下文来渲染“task_app”模板。

您还可以使用Router.current()从模板帮助程序或其他函数访问url参数和其他路由信息。因此,例如,在helper中,您可能会使用Router.current().params.query.task_name来获取当前任务名称。Router.current()是反应性元素,因此如果在反应式计算中使用它,则在对路由进行任何更改时,计算将重新运行。


1
现在,在您的示例中,如何在模板加载事件内访问该参数。基于您的示例,如何在Template.home.events({})中访问this.params.taskname。 - JCm
这个答案仅告诉我们如何在router.js文件中访问查询参数。 它并没有像原始示例所述那样解释如何在Template函数中访问查询参数。 - JoeTidee
3
如果你在使用 Iron Router 的话,就可以在 Meteor 的任何地方使用 Router.current().params。它是一个响应式变量,所以注意如果你在响应式计算中使用它,当参数改变时函数将会重新运行。 - Dsyko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接