【问题标题】:How to optimise the $filter in angularjs?如何优化 angularjs 中的 $filter?
【发布时间】:2013-08-13 10:03:24
【问题描述】:

有没有办法配置/使用角度 $filter 以便您可以逐渐将数据传递给它,而不是让它总是迭代整个数据,而只是过滤以前的数据?

我目前正在尝试拆分用户提供的字符串以对数据运行多个顺序文件管理器。因此,如果我有这样的数据: [{name:foo, city:bar},...x250] 我可以在搜索框中输入“巴黎”,从那时起,我应该只在巴黎的地方进行迭代,然后输入Hotel,然后输入Hilton ....问题是过滤器每次都在整个数据集上运行...有谁知道如何按角度顺序运行过滤器?

更新...

http://jsfiddle.net/Bretto/ZM4Qa/12/

.filter('searchFilter', function ($filter) {

return function (array, q) {

    console.log('data-entry: ', array.length);

    var filter = $filter('filter');

    var lookFor = function (word, data, cb) {
        var dataRes = filter(data, word);
        cb(dataRes);
    }


    var search = function (index, words, data, cb) {
        var word = words[index];
        lookFor(word, data, function (dataRes) {
            console.log('data-current: ', dataRes.length);
            if (index < words.length - 1) {
                index += 1;
                search(index, words, dataRes, cb);
            } else {
                cb(dataRes);
            }
        });
    }

    if (q && q.text) {
        var words = q.text.split(' ');
        var index = 0;

        if(array){
            //console.log(array.length);
        }

        search(index, words, array, function (dataRes) {
            array = dataRes;
        });
    }
    return array;
}

})

因此,这是一种尝试创建一个过滤器,该过滤器逐渐迭代以前的过滤结果(在输入中键入多个用空格分隔的单词......),问题是过滤器总是从整个数据开始。

现在清楚了吗?

【问题讨论】:

  • 你能创建一个 plunker 来更清楚地演示问题吗?

标签: angularjs filter angularjs-filter


【解决方案1】:

请使用多个过滤器,这样您就不必调整所有内容 以这个例子为起点

http://jsfiddle.net/ed9A2/1/

<tr ng-repeat="player in playersFound = (players | filter:{id: player_id, name:player_name, age:player_age})">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-17
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    相关资源
    最近更新 更多