Получить количество результатов после фильтрации ng-repeat с помощью ng-if

0

Я реализую функцию поиска в AngularJS, и я хочу, чтобы там было сообщение "Результаты не найдены", когда нет совпадений. Поскольку я фильтрую только некоторые из полей, а не все из них, я написал отдельную функцию фильтра, которая применяется в ng-if проверить, соответствует ли запись поиску или нет. Теперь мне нужно подсчитать полученные панели ПОСЛЕ завершения ng-repeat, поэтому я попытался использовать директиву after-repeat и присвоить значение переменной results в моем SearchController внутри этой директивы, но это ничего не делает.

HTML:

<div ng-if="searchctrl.results<1">No matches.</div>
<uib-accordion close-others="true"> 
    <uib-accordion-group ng-if="searchfilter(lokal)" is-open="isopen" ng-repeat="lokal in lokale | orderBy:'name'" after-repeat>
        [...]
    </uib-accordion-group>
</uib-accordion>

app.js (с контроллером для моего SearchController):

var app = angular.module('ZoiglApp', ['ngAnimate', 'ui.bootstrap', 'ngRoute', 'ngTouch', 'leaflet-directive']);

app.config(function($routeProvider) {
    $routeProvider
    [...]
    .when('/search/:searchterm', {
        controller: 'SearchController',
        controllerAs:'searchctrl',
        templateUrl: 'views/search.html'
    })
    .otherwise({
        redirectTo: '/home'
    });
});

afterRepeat.js:

app.directive('afterRepeat', function() {
    return {
        restrict: 'A',
        link: function(scope, elem, attrs) {
            if(scope.$last) {
                scope.searchctrl.results = angular.element('.panel').length;
            }
        }
    };
});

edit: Я все еще ищу решение. Я ответил на два предложения ниже своими проблемами с ними. Было бы очень приятно, если бы кто-то попытался найти мою ошибку

Теги:
angularjs-scope
angularjs-directive
angularjs-ng-repeat

2 ответа

1

Просто отфильтруйте свой список в другом контроллере и используйте его в своем представлении.

$scope.filteredLokale = $filter('filter')($scope.lokale, { param: "paramValue" });

После этого получите счетчик с параметром "длина".

    <uib-accordion close-others="true"> 
    <uib-accordion-group is-open="isopen" ng-repeat="lokal in filteredLokale | orderBy:'name'" >
        [...]
    </uib-accordion-group>
</uib-accordion>
{{ filteredLokale .length }}
  • 0
    Здравствуй. Спасибо за ответ и извините, что я так долго не отвечал, но я не мог разобраться в этом раньше. Теперь я создал собственный фильтр и могу использовать его в своем представлении ng-repeat="lokal in lokale | searchFilter:st | orderBy:'name'" (st - это моя поисковая строка), и он работает, но я не могу получить это работает изнутри контроллера, он возвращает пустой массив. Я пробовал $scope.filteredLokale = $filter('searchFilter')($scope.lokale, {st: $scope.st}); а также $scope.filteredLokale = $filter('searchFilter')($scope.lokale, $scope.st);
0

Вы должны создать угловой фильтр для функции searchFilter вместо ng-if. Затем вы можете назначить фильтрованный массив переменной, называемой filteredLokale как это

<uib-accordion-group ng-repeat="lokal in lokale | orderBy:'name' | searchFilter as filteredLokale">
</uib-accordion-group>
Length: {{filteredLokale.length}}
  • 0
    Я попробовал это, но псевдоним не работает, к сожалению. Список фильтруется нормально, но я не могу использовать переменные, они пусты / не существуют

Ещё вопросы

Сообщество Overcoder
Наверх
Меню