31

给定一个在满足某些条件时返回 true 的过滤器方法,是否可以在 HTML 中调用其相反的方法,例如使用:

"item in items | filter:!AllDay"

代替

"item in items | filter:AllDay"

? 或者您是否必须维护两种单独的过滤方法(一种为假,一种为真)?

4

4 回答 4

58

正如ENDOH所指出的(这个 SO 问题在技术上是重复的),您可以通过在前面加上“!”来否定过滤器。到过滤器字符串,如下所示:

filter:'!'+myFilter

请注意“!” 被引用。文档对此并不十分清楚,并且有一个示例会有所帮助。

于 2012-11-21T17:33:32.210 回答
32

shacker 的回答不适用于 angular 1.0.7,所以这里有另一种方法:

// You can register this in your AppCtrl if you like, otherwise just use $scope.
$rootScope.not = function(func) {
    return function (item) { 
        return !func(item); 
    }
};

然后你会这样做:

filter:not(myFilterMethod)
于 2013-07-23T13:28:19.907 回答
23
filter:({day: '!'+AllDay.day})
于 2013-11-20T10:22:52.080 回答
0

另一种选择是创建一个新的否定过滤器并将其管道化:

  .filter('not', function() {
    return function(input) {
      return !input;
    }
  })
"item in items | filter:AllDay | filter:not"
于 2020-08-14T13:23:55.657 回答