Во-первых, моя причина для создания пользовательского компаратора в первую очередь заключается в том, что атрибут выражения, являющегося массивом - например, «теги», - требовал выражения имеют значения в определенном порядке и не соответствуют друг другу. (Таким образом, выражение с тегами ['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']
}
Я не знаю, если это поможет вам, но вы можете использовать ключевое значение пары с нг-повтора (ключ, значение) в выражении - где ключ и значение могут быть любые пользовательские идентификаторы, и выражение - это выражение области действия, которое позволяет подсчету коллекции. Например: (имя, возраст) в {'adam': 10, 'amalie': 12}. – Brett