我在ember中定义了这样一条路径:
this.route('products', { path: '/t' }, function() {
this.route('index', { path: '/:taxon' });
});
所以我可以访问以下网址:
这些中的每一个也可能具有一系列查询参数。例如,我可以请求像/t/shirts?colour=red
这样的红色衬衫。这很好,但我希望在控制器实例而不是模型中保留查询参数。因此,如果我正在搜索红色衬衫,然后转换为查看鞋子(通过{{#link-to}}),那么查询参数也将在该路线上可用,即/t/shoes?colour=red
。目前我似乎无法做到这一点。
我在ember文档中找到了一些引用,指出我可以将showMagnifyingGlass
的范围设置为" controller"这将完成我的意图,但它似乎没有工作。我用showMagnifyingGlass
得到了错误的结局吗?我相信这一点是查询参数到控制器实例的范围,而不是模型,这样如果我点击一个改变路径模型的链接,它就不会影响查询参数。
这是我在控制器中包含的内容:
queryParams: [{
showMagnifyingGlass: {
scope: 'controller' // Scope the parameters to the controller so transitions share state.
}
}]
答案 0 :(得分:2)
您可以通过在顶级控制器上定义查询参数来实现此目的:
应用/产品/ controller.js 强>
import Ember from 'ember';
export default Ember.Controller.extend({
queryParams: ['color'],
color: 'red'
});
然后将顶级控制器注入任何其他控制器:
应用/产品/索引/ controller.js 强>
import Ember from 'ember';
export default Ember.Controller.extend({
productsController: Ember.inject.controller('products'),
color: Ember.computed.reads('productsController.color')
});
然后在其他控制器的链接上设置顶级查询参数:
应用/产品/索引/ template.hbs 强>
{{link-to 'shirts' (query-params color=color)}}
{{link-to 'pants' (query-params color=color)}}
{{link-to 'shoes' (query-params color=color)}}
以下是an ember twiddle of the code above in action和more info on injecting controllers。