在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
}
});
答案 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'))