javascript - 如何仅在应用过滤器后进行 ng-repeat?

标签 javascript angularjs angularjs-ng-repeat angularjs-filter

首先,我要提一下,我是 AngularJS 和编程的新手。 我的情况如下:

我正在处理从 SQL 数据库中提取的超过 50k 条目。

在对这些条目应用搜索/过滤器后,我必须在网络平台上显示这些条目。

所以我对此做了一些研究,得出的结论是: SQL>PHP>JSON>ANGULARJS。 我把所有这些都记下来了,问题是 ng-repeat 将所有内容发送到浏览器,我想要的是过滤结果,然后用 ng-repeat 打印它们。

我尝试过实现某种过滤器,但似乎无法解决它。

代码如下所示:

js:

var app = angular.module('myApp' ,[]);

app.controller('MainCtrl', function($scope, $http)
{
  $http.get("http:source.php")
  .then(function(response)
  {
    $scope.materiale = response.data.records;
  });
});

app.filter('filtruCautare', function () {
    return function (items, filtru) {
        var filtered = [];
        var filtruMatch = new RegExp(filtru, 'i');
        for (var i = 0; i < items.length; i++) {
            var item = items[i];
            if (filtruMatch.test(item.MATKL) || filtruMatch.test(item.MAKTX)) {
                filtered.push(item);
            } else if (filtruMatch.test(item.MATNR)) {
                    filtered.push(item);
            }
        }
        return filtered;
    };
});

html:

 <input ng-model='filtru' type="text" placeholder="...">

<tbody ng-repeat="material in materiale | filtruCautare:filtru">

我从几个博客、Stackoverflow 帖子/问题和其他几个来源将这些内容整合在一起......

我认为我需要以某种方式过滤 50k 条目,将它们存储在一个范围内,并使用 ng-repeat 从那里打印结果,只是我在创建一个从过滤器中提取信息的范围时遇到了麻烦.

感谢任何帮助!

最佳答案

如果未定义搜索过滤器(或者是空字符串),只需更改过滤器即可返回空数组。

这样,只有当您开始过滤时,您才会开始看到结果:

app.filter('filtruCautare', function () {
    return function (items, filtru) {
        if (!filtru) { 
          return [];
        }
        var filtered = [];
        var filtruMatch = new RegExp(filtru, 'i');
        for (var i = 0; i < items.length; i++) {
            var item = items[i];
            if (filtruMatch.test(item.MATKL) || filtruMatch.test(item.MAKTX)) {
                filtered.push(item);
            } else if (filtruMatch.test(item.MATNR)) {
                    filtered.push(item);
            }
        }
        return filtered;
    };
});

关于javascript - 如何仅在应用过滤器后进行 ng-repeat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54110382/

相关文章:

angularjs - 编写 AngularJS 轮询器

javascript - AngularJS( Material )-使用 md-dialog 添加新对象后刷新 md-list 中的数据

javascript - Angular ng-Repeat 带有存储选项的复选框

javascript - AngularJS 函数提升

javascript - 将 ng-model 作为参数传递给具有其他参数的函数,然后清除 ng-model

javascript - 我可以在 $rootScope.$on 函数中调用 $rootScope.$emit 吗?

javascript - 图像jquery前面的颜色

javascript - Jarvis.widget 不会在 AngularJS ng-repeat 中渲染

javascript - 使用 AngularJS 在 View 上显示来自 MySQL 的 LongBlob 照片

javascript - 如何划分输入字段以在屏幕上显示为单独的输入字段?