2015-06-30 56 views
1

JS Fiddle將提供更好的代碼信息。ng-repeat過濾器不適用於重複變量分配

所選項目應過濾其他值,我將有一個按鈕在列表項以外什麼將重新分配選定的值爲空,因此所有列表項都顯示。

點擊單選按鈕它應該隱藏其他元素。

控制器

var myApp = angular.module("repeat",["ngSanitize"]); 

myApp.controller("repeatController", function($sce, $window, $scope){ 

$scope.test ="Controller is working fine"; 

$scope.lists=[{"name":"asdf","desc":"dummy text 1"},{"name":"wee","desc":"dummy text 2"},{"name":"fgs","desc":"dummy text 3"}] 


}); 

HTML

<li ng-repeat ="list in lists | filter:{name:selected}"> 
    <label ng-click="selected = list.name"> 
     <input type="radio"> 
     {{list.name}}{{selected}} 
    </label> 

</li> 
+0

我不明白這個問題,你的意思是收音機保持全部檢查? –

回答

1

如果我理解正確的是什麼,你需要here is the JSFiddle隱藏不點擊的單選按鈕:

HTML:

<div ng-app="repeat" ng-controller="repeatController"> 
    <li ng-repeat ="list in lists" ng-hide="selected !== undefined && selected !== list.name"> 
     <label ng-click="$parent.selected = list.name"> 
      <input type="radio" name="selector" /> 
      {{list.name}}-{{selected}} 
     </label> 
    </li> 
</div> 

JS:

var myApp = angular.module("repeat", []); 

myApp.controller("repeatController", function($sce, $window, $scope){ 

    $scope.test ="Controller is working fine"; 

    $scope.lists=[{"name":"asdf","desc":"dummy text 1"},{"name":"wee","desc":"dummy text 2"},{"name":"fgs","desc":"dummy text 3"}] 
}); 

至於建議,你還需要從小提琴刪除ngSanitize或將其添加爲文件太大(例如添加該資源但對於小提琴的目的,你不需要它https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.1/angular-sanitize.min.js

+0

它按預期工作。問題是爲什麼我應該使用$ parent,如果我沒有孩子ng-repeat ..... –

+0

因爲'ng-repeat'爲每次迭代都創建一個新的範圍,所以在這種情況下需要使用'$ parent'。是的,你可以使用過濾器或隱藏,有很多方法可以做到這一點。相反,使用$ parent你也可以使用像'sel(list.name)'這樣的函數,並在控制器中使用'$ scope.sel = function(name){$ scope.selected = name; }' –

+0

在這種情況下,如果我在過濾器中使用$ parent作爲過濾器:{name:$ parent.selected},它不起作用。我在我的項目中加載ngSanitize。所以ngSanitize沒有問題。 –

0

您與ngSanitize有問題,請你的模塊中刪除ngSanitize那麼它的工作好。

你的模塊應該是這樣的下面的代碼

var myApp = angular.module("repeat",[]); 

看到這個Working Demo

+0

我在我的項目中加載了ngSanitize。這不是問題 –