好了,这里是你如何能将param传递给你的控制器,然后在此设置一个计算属性。
第一个路由
export default Ember.Route.extend({
iso: null,
queryParams: {
iso: {
refreshModel: true
}
},
model(params) {
this.set('iso', params.iso);
return this.store.query('product', params); // do your query here to fetch products based on iso or whatever
},
setupController(controller, model) {
controller.set('iso', this.get('iso'));
}
});
所以我在这里做 - 我做了PARAM ISO刷新模式 - 当它改变时模型会重新加载。这是可选的。同样在这条路线上,我创建了一个属性iso来存储它的值,因为模型在setupController之前执行。这只是后来将其价值传递给控制器的一个技巧。
现在你已经从参数值控制器,从那里你可以从这个值创建一个计算属性。事情是这样的:
export default Ember.Controller.extend({
iso: null, //it will be set by its router
isoComputed: Ember.computed('iso', function() {}) //do here a computed based on iso prop
}
这是从路由器PARAMS传递给控制器和内部控制器设置的计算机,你可以在你的模板中使用的一种方式。
请注意,如果这是你想要的,但我希望它有帮助。让我知道...
编辑
您更新的问题更有意义。我想你可能会对服务计算的属性,并将其改变后进行重定向,所以像这样
export default Ember.Controller.extend({ //you can do this on a route or controller
localization: Ember.inject.service('localization'),
locale: Ember.computed.oneWay('localization.locale'),
redirect: Ember.computed('locale', function() {
let locale = this.get('locale');
if(locale === "fr-FR") {
this.transitionTo('products', { queryParams: { iso: 'fr-FR' }}); //you can redirect to whatever
}
})
}
编辑2:
更多的思考服务对象后,应保存过渡值。这部分应该移动到Mixin,以便在每个嵌套路由中轻松实现。然后道具后重定向改变存储在服务,让另一个支柱是这样的:
params: Ember.computed.oneWay('localization.params'),
//inside redirect
this.transitionTo(...queryParams:{ this.get('params') })....
你有你的路线refreshModel:为ISO真正定义PARAM?我可以提供一个基于iso传递计算属性给控制器的例子,但这是你想要的吗? –
@MirzaMemic no?你能举个例子吗?这听起来很有希望:D – ShadowPuppet
作为后续工作,这不是查询参数指定为'?iso = en-us',而是针对URL本身中的实际路径段。 – ShadowPuppet