反转angular.js滤波器的极性

sha*_*ker 31 angularjs

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

"item in items | filter:!AllDay"
Run Code Online (Sandbox Code Playgroud)

代替

"item in items | filter:AllDay"
Run Code Online (Sandbox Code Playgroud)

?或者你必须维护两个单独的过滤方法(一个用于假,一个用于真)?

sha*_*ker 58

正如ENDOH所指出的那样(这个问题在技术上是重复的),你可以通过在'!'之前加上过滤器来否定过滤器.过滤字符串,如下所示:

filter:'!'+myFilter
Run Code Online (Sandbox Code Playgroud)

注意'!' 被引用.该文件是不会在这个非常清楚,并举例会有帮助.

  • 当myFilter是方法而不是模型时,这不适用于角度1.0.7.根本没有调用myFilter方法. (3认同)
  • 这非常有用,对于基于属性的过滤而不是字符串,它需要一些试验和错误,但要弄清楚:`filter:{myPropertyName:'!'+'EverythingOtherThanMe'}` (2认同)

Den*_*nov 32

shacker的答案对于角度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); 
    }
};
Run Code Online (Sandbox Code Playgroud)

然后你会这样做:

filter:not(myFilterMethod)
Run Code Online (Sandbox Code Playgroud)


muh*_*sil 24

filter:({day: '!'+AllDay.day})
Run Code Online (Sandbox Code Playgroud)