2015-08-25 51 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?