我正在尝试在Router.go中传递查询参数,如下所示:
var filter = 'abc';
var path = Router.current() && Router.current().path;
Router.go(path, {query: {filter: filter}});
但是这不会更改url,它仍会加载当前路径而不包含查询字符串。但是,如果我手动将查询参数添加到路径,如:
Router.go(path+'?filter='+filter);
这很好用。但是因为我试图用一些过滤的数据加载相同的页面。因此,单击过滤器按钮会反复将过滤器字符串反复附加到路径。
使用铁路由器传递查询字符串的正确方法是什么?
答案 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;
这应该为您提供没有附加查询字符串的路径。