Passing query parameters using Router.go in iron router
Asked Answered
B

4

11

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?

Broderick answered 28/8, 2014 at 13:1 Comment(1)
can I get my answer accepted?Murderous
M
12

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

Murderous answered 6/6, 2015 at 5:3 Comment(0)
P
4

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.

Pigweed answered 28/8, 2014 at 13:10 Comment(3)
I tried this but page does not re load with query parametersBroderick
This answer is almost correct. query needs to be a string like Router.go(path, {}, {query: "filter=filter"}). From Iron Router source line 220 github.com/iron-meteor/iron-router/blob/devel/lib/…Fixer
Hehe, a 5 times up voted answer, and it's wrong ;P But good catch, that should explain why it didn't worked for Aashu.Pigweed
C
3

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'}); 
Cabal answered 25/7, 2015 at 2:29 Comment(1)
Helped me a lot!Hoisch
K
1

Try this:

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

That should give you the path without the query string attached.

Keratitis answered 28/8, 2014 at 13:9 Comment(1)
Has changed to Router.current() && Router.current().route.urlEtesian

© 2022 - 2024 — McMap. All rights reserved.