在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)
通过在控制器中指定查询参数,params将自动包含它们
ApplicationController = Ember.Controller.extend({
queryParams: ['test'],
test: null
});
Run Code Online (Sandbox Code Playgroud)
小智 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钩,该解决方案的工作,当你有访问上queryParams的model钩子.
在最新的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时,此方法才有效.