首先,我首先创建自定义比较器的原因是因为表达式上的一个属性(如'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']
}
答案 0 :(得分:4)
我不完全确定我明白你要求的是什么。我用2个自定义过滤器函数为你做了一个plunkr,一个在列表项中按顺序查找“a”和“b”,另一个查找“a”和“b”只是在标签中项目。希望你可以采取这个并修改它来做你想要的。我认为为了您的目的,自定义过滤器功能比自定义比较器更容易处理。