How to get the query parameters in Iron-router?

人盡茶涼 提交于 2019-11-28 17:53:17

iron router >= 1.0

A route's query parameters are available as properties of this.params.query.

If your URL looked like:

/posts/5?sort_by=created_at

then this.params.query.sort_by would equal 'created_at'.


iron router < 1.0

A route's query parameters are available as properties of this.params.

If your URL looked like:

/posts/5?sort_by=created_at

then this.params.sort_by would equal 'created_at'.

Just call

Router.current().params //params is the dict you wanted

in Iron Router 7.1+

Wes Modes

Interestingly three answers and no one offered the complete answer.

Iron-Router 1.0.x

From within a route, use:

// URL: http://example.com/page/?myquerykey=true
this.params.query   // returns the full query object
this.params.query.myquerykey   // returns a particular query value

Similarly, outside of the route (but still inside the client code), and inside your template, use:

// URL: http://example.com/page/?myquerykey=true
Router.current().params.query
Router.current().params.query.myquerykey

Query parameters, not to be confused with parameters passed via the URL.

In Iron Router 1.0.0, you need to use

this.params.query.YOUR_PARAMETER_NAME

to get it

For example, if you route is /xxx/?a=b

this.params.query.a

outputs 'b'

try tihs:

 Router.current().params.parametername;

and in router.js file routing must be:

route(routername/:parametername)

Ensure that if you are using Router.go that your first parameter is a template name, and not a path. query parameters are not passed if you specify a path.

Kalin Stoev

You can pass queries like this depending on where you accessing the router:

In the template

{{pathFor 'routeName' query='queryName=queryValue'}}

In the helper

Router.go ('routeName',{},{query: 'queryName=queryValue'}

Note: the empty object between the routeName and the query is if you want to specify any parameters (refer to the full docs to see the difference).

If you would like to pass multiple queries do it like this:

query: 'queryName1=queryValue&queryName2=queryValue'

Don't use spaces and remember to use the & sign.

Encoded URI undefined Solution:

The better way to get the query parameters object is:

this.request.query.MyParam

Using the suggested option of:

this.params.query.MyParam

Is ok as long as you are not working with encodedURI parameters, when using this option with encodedURI parameter, the parameter will be equal to undefined.

Example below:

{ // console.log(this.params.query)
    product: 'Chair',
    ip: '172.0.1.183',
    message: 'My Little Chair',
    request: '100% Discount',
    severity: '4',
    api_key: 'XXXXX' 
}

{ // console.log(this.params.query)
    product: 'Chair',
    ip: '172.0.1.183',
    message: 'My Little Chair',
    request: 'undefined', // NOTICE THIS CHANGED TO UNDEFINED!
    severity: '4',
    api_key: 'XXXXX' 
}

Original Query String:
?product=Chair&ip=172.0.1.183&message=My Little Chair&request=100%25%20Discount&severity=4&api_key=XXXXX
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!