考慮也傳遞function
而不是Object
爲filter(可工作這段時間,但不是所有的東西都容易直接在vi中以可讀的方式表達EW):
ng-repeat="group in groups | filter:functionOnScope"
的|
管上的東西向左groups
工作,從而filter
是一個函數,它的第一個參數接收groups
和其隨後的參數出現在:
之後。您可以將a | b:c:d | e
想象爲e(b(a,c,d))
--一旦我意識到我使用過濾器更多的是爲了簡單的事情。
所以第二個參數filter
接收是謂詞(函數,它的東西,並返回true
或false
到每個元件上的操作 - 如SQL WHERE子句)內groups
。過濾器是非常有用的 - 如果你想在視圖中做快速的邏輯或轉換(並且你不需要測試它),那麼它們可以使你的控制器和指令更加簡潔。 (因此,代替ng-if="collection[collection.length - 1].length > 0"
,您可以編寫ng-if="collection | last | some"
,這樣更具可讀性。)
如果您有複雜的邏輯,可能會更好地放置控制器或指令而不是視圖(這也更容易進行單元測試這樣如果你關心它) - 如果它在視圖中,你至少需要像PhantomJS這樣的東西來模擬DOM。假設您在$scope
到1
,2
等上綁定了一些dynamicallySelectedPart
,2
等可能作爲ng-model
在<select />
上,所以用戶可以選擇它,然後您可以編寫它以使其動態保持最新。
$scope.functionOnScope = function (elementInGroups) {
// Maybe do a check like:
// if ($scope.dynamicallySelectedPart === elementInGroups.part) {
return true;
// }
// Some other logic...
return false;
};
JSON是錯誤的組是一個數組,但其中有鍵值。 –
你的JSON數組是擰的,檢查這個例子http://plnkr.co/edit/8K0roOawfApaNq4yFjQh – sreeramu