首先,我首先创建自定义比较器的原因是因为表达式上的属性是一个数组——例如“标签”——要求表达式具有特定顺序的值,否则将不匹配. (所以带有标签['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']
}