proteye
@proteye
Web programmer

Как подсчитать количество отфильтрованных значений в Angular JS (filter)?

Все привет!
Подскажите, пожалуйста, о имеющие опыт в Angular JS.
Задача следующая: есть строка поиска фраз и соответственно список фраз. Необходимо подсчитать количество найденных фраз и вывести на экран. Напр.: всего - 10500, найдено - 399.
ng-repeat="item in main.keywords | keywordsFilter:keywordCtrl.filterModel1 | keywordsFilter:keywordCtrl.filterModel2 | keywordsFilter:keywordCtrl.filterModel3 | keywordsFilter:keywordCtrl.filterModel4 | limitTo: 300 | orderBy:'freq':true"

.filter('keywordsFilter', function () {
            return function (items, criterion) {
                return items.filter(function (element, index, array) {
                    var str = String(element.phrase);
                    if (str.indexOf(criterion) + 1) {
                        return true;
                    } else {
                        element.visible = false;
                    }
                });
            }
        })

<ul class="list-inline">
            <li>Всего фраз: {{main.keywords.length}}</li>
            <li>Найдено: {{ ??? }}</li>
        </ul>
  • Вопрос задан
  • 337 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
сделайте это в директиве, подготовьте данные в контроллере и все. Не надо пытаться сделать это заведомо неудобно и не правильно (с архитектурной точки зрения).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Вы же не хотите грузить на фронт все 10500( а если их будет 100500) значений? Делайте это на бэке, и показывайте только то, что нужно.
P.S.
Чтобы получить модельку с отфильтренными записями - можно написать как-то так:
ng-repeat="item in main.filteredKeywords = (main.keywords | filter1| fliter2|....)"
Ответ написан
proteye
@proteye Автор вопроса
Web programmer
Вот, что я пытаюсь сделать.
Backend сделан простой без применения фрэймворков, чисто для загрузки данных.
Исходники: https://github.com/proteye/keywords-grouper
Пример можно посмотреть здесь: proteye.ru
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы