我该如何在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});
};
感谢您的选择。
我该如何在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});
};
您可能需要使用路由器来处理路径并为不同的路径呈现特定的模板。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()是反应性元素,因此如果在反应式计算中使用它,则在对路由进行任何更改时,计算将重新运行。