AngularJS:为什么在ng-Click上触发自定义过滤器?

时间:2017-11-05 02:16:27

标签: angularjs ionic-framework angular-filters

我有一个自定义过滤器,可根据用户输入过滤项目名称列表

.filter('searchFor', function () {
return function (arr, searchText) {
    var result = [];
    debugger
    if (!arr || !arr.length) {
        return;
    }

    if (!searchText) {
        return arr;
    }

    ......
    return result;
}

})

我在我的视图中使用如下:

 <ion-item ng-repeat="item in items | searchFor:searchText">
    <div ng-click="DisplayItem(item.id)">
 ....

问题是,当我尝试触发DisplayItem功能或甚至点击后退按钮(均使用ng-Click)时,searchFor过滤器被触发且ng-Click功能没有工作。

如果我用这样的过滤器替换searchFor

<ion-item ng-repeat="item in items | filter:searchText">

然后ng-Click有效,但我无法使用自定义过滤器。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

filter函数应该是一个纯函数,这意味着它应该总是在给定相同输入参数的情况下返回相同的结果,并且不应该影响外部状态。

尝试按照它将获得应用过滤器的数组输入的新副本。

.filter('searchFor', function () {
return function (arr, searchText) {
    var result = [];

    if (!arr || !arr.length) {
        return;
    }

    if (!searchText) {
        return [];
    }

    angular.forEach(arr, function(item) {
        //your filtering logic should come here
        result.push(item);
    });

    return result;
}

查看有关Custom filters

的更多详情