Reputation: 173
I am trying to pass query parameters in Router.go like below:
var filter = 'abc';
var path = Router.current() && Router.current().path;
Router.go(path, {query: {filter: filter}});
But this does not change the url, it stills loads current path without query string only. But if I add the query parameter manually to path like:
Router.go(path+'?filter='+filter);
this works fine. But since I am trying to load same page with some filtered data. So clicking filter button repeatedly appends the filter string again and again to path.
What is the correct way of passing query string using iron router?
Upvotes: 11
Views: 15719
Reputation: 69
I found that if your first parameter in Router.go is a path, instead of a template name, the query filter is not passed. Use a template name:
Router.go(templatename, {_id: 1}, {query: 'q=s', hash: 'hashFrag'});
Upvotes: 3
Reputation: 5617
Right there in the docs
Router.go('post.show', {_id: 1}, {query: 'q=s', hash: 'hashFrag'});
The above JavaScript will navigate to this url:
/post/1?q=s#hashFrag
https://github.com/iron-meteor/iron-router/blob/devel/Guide.md#named-routes
Upvotes: 12
Reputation: 8345
The parameters are Router.go(path, params, options)
. The query part should go in the options
parameter, so try the following: Router.go(path, {}, {query: {filter: 'filter='+filter}})
.
EDIT
Answer updated according to Robins comment below.
Upvotes: 4
Reputation: 8013
Try this:
var path = Router.current() && Router.current().route.originalPath;
That should give you the path without the query string attached.
Upvotes: 1