Angular$filter的单个属性的自定义比较器



首先,我创建自定义比较器的原因是,表达式上的一个数组属性(如"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']
}

我不能完全理解你的要求。我为您制作了一个带有两个自定义过滤函数的plunkr,一个在列表项中按顺序查找"a"one_answers"b",另一个只在该项的标签中查找"a"one_answers"b"。希望你能接受这个并修改它以做你想做的事。我认为出于您的目的,自定义过滤器函数将比自定义比较器更容易处理。

http://plnkr.co/edit/fJ9iPQYyhGxAt00xi0OY

最新更新