2015-08-25 50 views
0

我试图创建一个基于过滤器的按钮,但只要我将过滤器附加到ng-重复它不再工作了(注意,需要的对象被过滤在另一个ng-repeat中)。为什么过滤器在另一个ng-repeat时不工作

<!-- This works --> 
<div ng-click="myFilter = {name: 'Test'}">button</div> 

<!-- This does not work --> 
<span ng-repeat="(key, button) in gl_categories"> 
    <div ng-click="myFilter = {name: 'Test'}">{{button}}</div> 
</span> 

回答

1

AngularJS开发人员建议不要写代码模板。模板必须像只读一样使用。

在你的情况,问题是因为ng-repeat为每次迭代创建一个新的作用域。你正在写迭代范围。

尝试使用功能而不是手动分配。

$scope.setFilter = function(value){ 
    $scope.myFilter = {name: value} 
} 

<span ng-repeat="(key, button) in gl_categories"> 
    <div ng-click="setFilter('test')">{{button}}</div> 
</span> 
0

由于ngRepeat创建自己的子范围,每个点击事件发生时,另一myFilter变量被在该范围内创建。您可以使用一个对象,然后设置对象的属性(这将泡涨)

<div ng-click="x.myFilter = {name: 'Test'}">button</div> 

<span ng-repeat="(key, button) in gl_categories"> 
    <div ng-click="x.myFilter = {name: 'Test'}">{{button}}</div> 
</span> 

我建议你阅读以下职位的真棒解释:What are the nuances of scope prototypal/prototypical inheritance in AngularJS?