gpt4 book ai didi

javascript - ng-repeat 过滤器 - 没有过滤对吗?

转载 作者:行者123 更新时间:2023-12-01 04:06:17 28 4
gpt4 key购买 nike

我在 ng-repeat 中使用过滤器将 Json 列表分为两个子列表:一个包含当前过去的项目,另一个包含 future 的项目。 json 有一个名为“dateFrom”的键,我将其与实际日期进行比较,以确定该项目将出现在哪个列表中。

但是,尽管过滤器函数仅使用“dateFrom”键来确定这一点,但如果我也修改其他一些键,过滤器就会发生变化。

我做了一个快速的 jsFiddle 来显示问题:

https://jsfiddle.net/1j2p2hbg/1/

过滤函数为:

$scope.isPast = function(item)
{
var now = new Date();
return (item.dateFrom <= now);
}

我们有 4 个元素...其中 3 个有实际日期,其他有 future 日期。“isPast”函数仅检查“dateFrom”属性,但如果我更改属性“keyBoolOne”和“keyBoolTwo”,它也会影响过滤器。

谁能告诉我为什么?

提前致谢!

最佳答案

在 AngularJS 中反转过滤器的极性是有问题的。文档中也没有提及,但您应该使用

<div ng-repeat="item in list | filter: '!'+keyBoolOne">

而不是

<div ng-repeat="item in list | filter: !keyBoolOne">

但就您而言,这仍然不起作用,因为您使用的是函数而不是对象的属性。

替代方案 1

为了避免这种不明确的错误,您可以定义二级过滤函数,如下所示;

$scope.isFuture = function(item){
return !$scope.isPast(item);
}

并将其用作第二个子列表的过滤器。

<div ng-repeat="item in list | filter: isFuture">

替代方案 2

如果您不想为每个过滤器定义额外的函数(可能会被否定),您可以自己定义“not”函数。

$scope.not = function(filterFunc) {
return function (item) {
return !filterFunc(item);
}
};

并按如下方式使用它(在任何地方/任何子列表中);

<div ng-repeat="item in list | filter: not(isPast)">

要检查的引用文献;

Reverse the polarity of AngularJS filters

Negation on filter

关于javascript - ng-repeat 过滤器 - 没有过滤对吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41808945/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com