1

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

1 回答 1

4

我不完全确定我理解你的要求。我用 2 个自定义过滤器函数为您制作了一个 plunkr,一个在列表项中按顺序查找“a”和“b”,一个在标签中查找“a”和“b”物品。希望您可以接受并修改它以执行您想要的操作。我认为出于您的目的,自定义过滤器功能将比自定义比较器更容易处理。

http://plnkr.co/edit/fJ9iPQYyhGxAt00xi0OY

于 2013-09-09T23:11:07.663 回答