首先,我首先創建自定義比較器的原因是因爲表達式上的屬性(如'tags')需要表達式具有特定順序的值並且不會以其他方式匹配。 (因此,帶有標籤['a','b']的表達式將匹配['x','a','b','y']而不是['x','b','a',' y']。)
我已經能夠解決這個問題了,因爲在Angular的$ filter過程中,它允許你提供一個自定義比較器。但是,我只能根據屬性類型進行過濾,而不是密鑰的值。
我想要一個自定義的比較器只有一個對象的屬性。有沒有辦法做到這一點,而不需要複製和修改Angular的源代碼?
這裏是我的自定義比較的例子:(在http://plnkr.co/edit/eFeinQhHTIZrzXBm4srq找到)
$scope.inclusiveFilter = function(expected, actual){
if(expected && actual){
console.log(expected, actual);
if(angular.isArray(expected) && angular.isArray(actual)){
for(var t in actual){
if(expected.indexOf(actual[t]) == -1){
return false;
}
}
}
return true;
}
}
在我的例子上的標籤過濾器工作得很好,但它不再適用於$匹配任何財產,我我只能根據他們的類型比較屬性,而不是他們的名字。所以像這樣的表達可能永遠不會工作:
{
includeThese: ['a', 'b'],
excludeThese: ['x', 'y']
}
我不知道這是否會幫助你,但你可以使用一個鍵值對,在表達NG重複(鍵,值) - 其中鍵和值可以是任何用戶定義的標識符,和表達式是給出集合枚舉的範圍表達式。 例如:({adam':10,'amalie':12}中的(姓名,年齡)。 – Brett