好了,這裏是你如何能將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