Как повторить нг только после применения фильтра? - PullRequest
0 голосов
/ 09 января 2019

Прежде всего, позвольте мне упомянуть, что я новичок в AngularJS, а также в программировании. Моя ситуация такова:

Я имею дело с более чем 50k записями, которые я извлекаю из базы данных SQL.

Я должен показать эти записи на веб-платформе после применения поиска / фильтра к этим записям.

Итак, я провел некоторое исследование по этому вопросу и пришел к выводу, что путь должен быть следующим: SQL> PHP> JSON> ANGULARJS. Я получил все это, дело в том, что ng-repeat отправляет все в браузер, и я хочу отфильтровать результаты и затем распечатать их с помощью ng-repeat.

Я пытался реализовать своего рода фильтр, но я не могу решить его.

Код выглядит так:

ЯШ:

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, чтобы напечатать результаты оттуда, просто у меня возникли проблемы с созданием области, которая извлекает информацию из фильтра .

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 09 января 2019

Просто измените свой фильтр, чтобы он возвращал пустой массив, если поисковый фильтр не определен (или является пустой строкой).

Таким образом, вы начнете видеть результаты только тогда, когда начнете фильтровать:

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;
    };
});
...