首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS中的自定义和标准多重过滤器

AngularJS中的自定义和标准多重过滤器
EN

Stack Overflow用户
提问于 2019-12-04 14:55:43
回答 1查看 58关注 0票数 0

我有一个angularJS列表,我想实现几个过滤器,其中一个将是自定义过滤器。

代码语言:javascript
复制
<li ng-repeat="item in cumulus.items | orderBy: predicate:reverse 
               | filter:listSearch | filter:filteredDates"
    ng-show="cumulus.items.length > 0">
</li>

我的过滤器listSearch工作正常,我已经根据这两个输入和按钮单击为filteredDates创建了一个函数:

代码语言:javascript
复制
<input type="date" ng-model="filter_startDate" />
<input type="date" ng-model="filter_endDate" />
<button id="search" ng-click="dateRange(filter_startDate,filter_endDate, cumulus.items)" >Search</button>

我的函数是在控制台上返回正确的项,我所需要的只是用返回的值更新列表。以下是功能:

代码语言:javascript
复制
$scope.dateRange = function (initialDateVal, endDateVal, cumulusItems) {
    filteredDates = [];
    var parsedinitialDateVal = Date.parse(initialDateVal);
    var parsedendDateVal = Date.parse(endDateVal);
    console.log("Initial date:", initialDateVal, parsedinitialDateVal);
    console.log("End date:", endDateVal, parsedendDateVal);
    if (cumulusItems && initialDateVal && endDateVal) {

        angular.forEach(cumulusItems, function (item) {

            parsedItemCreationDate = Date.parse(item.creationDate);

            if (parsedItemCreationDate >= parsedinitialDateVal
                && parsedItemCreationDate <= parsedendDateVal) {

                filteredDates.push(item);
            }                 

        });
    }

    console.log(filteredDates);
    return filteredDates;
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-04 16:48:52

一种方法是使用自定义谓词函数:

代码语言:javascript
复制
<li ng-repeat="item in cumulus.items | orderBy: predicate:reverse 
               | filter:listSearch | filter: predicateFn">
</li>
代码语言:javascript
复制
$scope.predicateFn = function(element) {
    var parsedinitialDateVal = $scope.filter_startDate.valueOf();
    var parsedendDateVal = $scope.filter_endDate.valueOf();
    console.log("Initial date:", initialDateVal, parsedinitialDateVal);
    console.log("End date:", endDateVal, parsedendDateVal);

    var parsedItemCreationDate = Date.parse(element.creationDate);

    if (parsedItemCreationDate >= parsedinitialDateVal
        && parsedItemCreationDate <= parsedendDateVal) {

        return true;
    } else {
        return false;
};

谓词函数可用于编写任意筛选器。该函数针对数组的每个元素调用,元素、其索引和整个数组本身作为参数。

最后的结果是谓词返回true的元素数组。

有关详细信息,请参阅

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59178843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档