2016-06-08 47 views
1

我創建了一個filter,我想傳遞一個item屬性,而不是項目本身。那可能嗎?如何將ng-repeat項目屬性傳遞給過濾器?

下不起作用(item.param1失敗):

ng-reapeat="item in items | filter : fnFilter(item.param1)" 

$scope.fnFilter = function(value) { 
    return value == "test"; 
} 
+1

檢查此:http://stackoverflow.com/a/20292780/5376197 –

+0

和答案是什麼?鏈接的問題不*告訴如何將'ng-repeat'元素的屬性參數傳遞給過濾器函數。但這確實是這裏的問題。 – membersound

+0

_「我創建了一個過濾器」_您爲過濾器過濾器創建了一個謂詞。你爲什麼不用'fnFilter'作爲「真實」謂詞的包裝呢?或創建一個實際的過濾器。 – zeroflagL

回答

1

你的問題還不是很清楚sdince你不說真的有什麼是你的目標。

所以,如果我只是限制什麼,我看到那裏,下面的鏈接已經被@CeylanMumumKocabas提供Angular filter exactly on object key你會

ng-repeat="item in items | filter:{'param1': 'test'}" 

現在讓我們考慮你想要的東西更復雜:我看到的唯一方法是該屬性的名稱傳遞到過濾器:

ng-reapeat="item in items | myFilter:'param1'" 

    myApp.filter('myFilter', function() { 
     return function(inputs,attributeName) { 
     var output = []; 
     angular.forEach(inputs, function (input) { 
     if (input[attributeName] == 'test') 
      output.push(input); 
     }); 
     return output; 
    }; 
}); 

請注意,如果你想要去的不止一個級別,你將不得不使用$ EVAL或使添加一些代碼這個工作。

+0

接近:我想將'item.param1'的值傳遞給過濾器。然後讓過濾器函數決定根據多個條件返回true或false。我不想僅基於一個值來過濾該屬性,就像你用'test'做的測試' – membersound

+0

我剛剛從你的示例中拿出的那樣,我不認爲你可以將一個屬性傳遞給過濾器,這就是爲什麼我要通過屬性的名稱,所以我仍然可以匹配需要能夠過濾屬性,可以更改。 – Walfrat

相關問題