2014-09-19 110 views
18

在1.7 Ember应支持查询参数。我没有问题在控制器中使用它们,但我想在Route中访问它们,理想情况是在beforeModel钩子中,但模型钩子也可以。如何从Ember中的路由访问查询参数1.7

API docs提到了beforeModel钩子的quereyParam参数,但如果我尝试使用它,它总是未定义的。

Query Parameters guide似乎表明查询参数应作为模型钩子的第一个参数的一部分进行访问。但是这也没有定义。有关示例,请参阅下面的代码。

有没有办法从路由访问查询参数? 谢谢你的帮助。

App.ApplicationRoute = Em.Route.extend({ 
    beforeModel: function(transition, queryParams){ 
     console.log(queryParams.test); //undefined at /?test=123 
    }, 
    model: function(params){ 
     console.log(params.test); //undefined at /?test=123 
    } 
}); 
+2

你应该能够将它从模型钩子中的'params'对象中拉出来。请参阅:http://emberjs.jsbin.com/necid/1/edit?html,js,console,output您是否将'test'设置为控制器中的queryParam? – tikotzky 2014-09-19 22:34:38

+0

谢谢,就是这样。我从来没有想到Controller可能会影响Route。我认为该设置仅用于直接在Controller中访问queryParams。 – jancervinka 2014-09-20 15:26:42

回答

19

敢肯定这是一个错误,但你可以在此期间通过过渡对象访问它们:

App.ApplicationRoute = Em.Route.extend({ 
    beforeModel: function(transition){ 
     console.log(transition.queryParams.test); 
    } 
} 
+2

谢谢,这确实起作用,并且在beforeModel钩子中执行此操作更为简单。奇怪的是,即使在1.8.1中它仍然没有被修复。我不确定它是一个错误还是只是一个不清楚的文档。 – jancervinka 2014-11-05 17:06:34

+0

@typeoneerror:您的解决方案仅适用于locationType为auto的情况。你知道如何抓住查询参数,如果位置类型是散列 – 2017-03-22 21:35:32

6

通过指定控制器中的查询参数,params会自动包含这些

ApplicationController = Ember.Controller.extend({ 
    queryParams: ['test'], 
    test: null 
}); 
+0

如何访问它们? 'console.log(this.get('test'))'扔我一个未定义。谢谢! – 2015-10-14 14:51:31

+0

完全一样的问题? – testndtv 2015-10-16 10:32:03

+1

在路线中,您可以使用'this.controller.get('test')''test'获取'test'的值。 – Voles 2016-04-30 13:29:20

-4

如果你想在didTransiti访问行动,

didTransition: (queryParams) -> 
    console.log(@get('queryParams')) 
5

在最新版本的余烬你可以在路由值

import Ember from 'ember'; 
export default Ember.Route.extend({ 
    beforeModel(params){ 
     console.log(params.queryParams.test); //if the parameter contains test as the key 
    } 
}); 

这只有在的locationType在你environment.js文件自动。

5

在(在写这个答案的时候2.12)最新版本的余烬,queryParams可以在模型钩来访问如下:

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    queryParams: { 
     test: '' 
    }, 
    model(params) { 
     console.log(params.test); 
    }, 
}); 

观察到,现在无论动态段和queryParams都可以通过访问params对象。由于paramsbeforeModel钩子中不可用,所以当您必须访问model挂钩中的queryParams时,此解决方案才有效。