好的,以下是如何将参数传递给控制器,然后在其上设置计算属性。
第一条路线
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 之前执行的。这只是稍后将其值传递给控制器的技巧。
现在你有值 iso 从 params 到控制器,从那里你可以从这个值创建一个计算属性。像这样的东西:
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
}
这是一种从路由器参数传递到控制器并在控制器内部设置一个可以在模板中使用的计算值的方法。
请注意确定这是否是您想要的,但我希望它有所帮助。让我知道...
编辑
您更新的问题更有意义。我认为您可以在服务上有一个计算属性,并在更改后进行重定向,所以像这样
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 中,以便在每个嵌套路由中轻松实现。然后 prop 更改后的重定向存储在 service 中,因此另一个 prop 如下所示:
params: Ember.computed.oneWay('localization.params'),
//inside redirect
this.transitionTo(...queryParams:{ this.get('params') } )....