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

jan*_*nka 20 ember.js

在1.7 Ember应该支持查询参数.我在控制器中使用它们没有问题,但我想在Route中访问它们,理想情况下在beforeModel钩子中,但模型钩子也可以.

API文档提到一个queryParam参数为beforeModel挂钩,但如果我尝试使用它,它总是不确定的.

" 查询参数"指南似乎建议查询参数应作为模型挂钩的第一个参数的一部分进行访问.但这也是未定义的.有关示例,请参阅下面的代码.

有没有办法从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
   }
}); 
Run Code Online (Sandbox Code Playgroud)

typ*_*ror 21

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

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

  • 谢谢,这确实有效,在beforeModel hook中执行此操作更为清晰.奇怪的是,即使在1.8.1中,它仍然没有得到修复.我不确定这是一个错误还是一个不清楚的文档. (2认同)

Ram*_*oya 7

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

ApplicationController = Ember.Controller.extend({
  queryParams: ['test'],
  test: null
});
Run Code Online (Sandbox Code Playgroud)

  • 在路由中,您可以使用`this.controller.get('test')`获取`test`的值 (2认同)
  • 你可以像beforeModel(params){console.log(params.queryParams.test); } (2认同)

小智 7

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

import Ember from 'ember';

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

观察现在两个动态段queryParams并可通过params对象访问.由于params在不使用beforeModel钩,该解决方案的工作,当你有访问上queryParamsmodel钩子.


iOS*_*dev 5

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

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

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