使用铁路由器中的Router.go传递查询参数

时间:2014-08-28 13:01:55

标签: meteor iron-router

我正在尝试在Router.go中传递查询参数,如下所示:

var filter = 'abc';
var path = Router.current() && Router.current().path;
Router.go(path, {query: {filter: filter}});

但是这不会更改url,它仍会加载当前路径而不包含查询字符串。但是,如果我手动将查询参数添加到路径,如:

Router.go(path+'?filter='+filter);

这很好用。但是因为我试图用一些过滤的数据加载相同的页面。因此,单击过滤器按钮会反复将过滤器字符串反复附加到路径。

使用铁路由器传递查询字符串的正确方法是什么?

4 个答案:

答案 0 :(得分:10)

就在文档中

Router.go('post.show', {_id: 1}, {query: 'q=s', hash: 'hashFrag'});

以上JavaScript将导航到此网址:

/post/1?q=s#hashFrag

https://github.com/iron-meteor/iron-router/blob/devel/Guide.md#named-routes

答案 1 :(得分:4)

参数为Router.go(path, params, options)。查询部分应该放在options参数中,因此请尝试以下操作:Router.go(path, {}, {query: {filter: 'filter='+filter}})

修改

根据罗宾斯的评论更新答案。

答案 2 :(得分:3)

我发现如果您在Router.go中的第一个参数是路径而不是模板名称,则不会传递查询过滤器。使用模板名称:

Router.go(templatename, {_id: 1}, {query: 'q=s', hash: 'hashFrag'}); 

答案 3 :(得分:0)

试试这个:

var path = Router.current() && Router.current().route.originalPath;

这应该为您提供没有附加查询字符串的路径。