在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 } });
typeoneerror.. 21
很确定这是一个错误,但您可以通过转换对象同时访问它们:
App.ApplicationRoute = Em.Route.extend({ beforeModel: function(transition){ console.log(transition.queryParams.test); } }
谢谢,这确实有效,在beforeModel hook中执行此操作更为清晰.奇怪的是,即使在1.8.1中,它仍然没有得到修复.我不确定这是一个错误还是一个不清楚的文档. (2认同)
Ramy Ben Aro.. 7
通过在控制器中指定查询参数,params
将自动包含它们
ApplicationController = Ember.Controller.extend({
queryParams: ['test'],
test: null
});
在路由中,您可以使用`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); }, });
观察现在两个动态段queryParams
并可通过params
对象访问.由于params
在不使用beforeModel
钩,该解决方案的工作,当你有访问上queryParams
的model
钩子.
在最新版本的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
钩子.
通过在控制器中指定查询参数,params
将自动包含它们
ApplicationController = Ember.Controller.extend({
queryParams: ['test'],
test: null
});
很确定这是一个错误,但您可以通过转换对象同时访问它们:
App.ApplicationRoute = Em.Route.extend({ beforeModel: function(transition){ console.log(transition.queryParams.test); } }
在最新的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 } });
仅当environment.js文件中的locationType为auto时,此方法才有效.