如何从Ember 1.7中的路由访问查询参数

时间:2014-09-19 20:21:46

标签: ember.js

在1.7中,Ember应该支持查询参数。我在控制器中使用它们没有问题,但是我想在Route中访问它们,理想情况是在beforeModel钩子中,但模型钩子也能正常工作。

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

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

有没有办法从Route?

访问查询参数

感谢您的帮助。

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
   }
}); 

5 个答案:

答案 0 :(得分:21)

很确定这是一个错误,但您可以通过转换对象同时访问它们:

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

答案 1 :(得分:7)

通过在控制器中指定查询参数,params将自动包含它们

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

答案 2 :(得分:6)

在最新版本的ember中(编写本答案时为2.12),可以在模型钩子中访问queryParams,如下所示:

import Ember from 'ember';

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

观察现在可以通过queryParams对象访问动态细分和params。由于params钩子中没有beforeModel,因此当您必须访问queryParams挂钩中的model时,此解决方案就可以使用。

答案 3 :(得分:5)

在最新的ember版本中,您可以在Route中获取值

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

仅当您的environment.js文件中的locationType为auto时,此方法才有效。

答案 4 :(得分:-4)

如果您想访问didTransition操作,

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