Получить номер соответствующего ng-if ng-повторения

0

Скажем, у меня есть что-то вроде этого:

<md-grid-tile class="gray" ng-repeat="carto in cartoList" ng-if="search(carto)">
         <md-button ng-click="changeSVG(carto.fileName)" aria-label="carto.displayName">
             <img src="style/images/thumbnails/{{carto.fileName}}.png" width="100%" height="100%" title="{{carto.fullDisplayName}}" style="max-height: 220px;"></img>
         </md-button>
         <md-grid-tile-footer><h3 align="center">{{carto.displayName}}</h3> </md-grid-tile-footer>
</md-grid-tile>

Есть ли способ получить количество отображаемых фрагментов? Значение количества элементов в ng-repeat соответствующих ng-if:

<md-grid-tile class="gray" ng-repeat="carto in cartoList" ng-if="search(carto)">

В соответствии с запросом функция search:

    $scope.search = function (carto) {
    if ($scope.sideMenu) {
        var searchRegex = new RegExp('global', 'i');

        if (carto.fullDisplayName.search(searchRegex) != -1)
            return true;
    }
    else if ($scope.sideSearch) {
        if ($scope.searched.IS.indexOf(carto.informationSystem) === -1 && carto.informationSystem)
            return false;
        if ($scope.searched.area.indexOf(carto.area) === -1 && carto.area)
            return false;
        if ($scope.searched.block.indexOf(carto.block) === -1 && carto.block)
            return false;
        if ($scope.searched.type.indexOf(carto.type) === -1 && carto.type)
            return false;
        if ($scope.searched.level.indexOf(carto.level) === -1 && carto.level)
            return false;

        if ($scope.searchInput) {
            var searchRegex = new RegExp($scope.searchInput, 'i');

            if (carto.fullDisplayName.search(searchRegex) === -1)
                return false;
        }
        if (!$scope.homeVisible) {
            $scope.homeVisible = true;
            window.history.pushState("newUrl", "CartoViewer", window.location.origin + window.location.pathname);
        }
        return true;
    }
    else
        return true;
};
Теги:
angularjs-ng-repeat
angular-ng-if

1 ответ

1
Лучший ответ

Лично, я бы фильтр cartoList прежде чем отправить его на представление:

$scope.cartoListFiltered = function() {
    return $scope.cartoList.filter($scope.search);
};

И, на ваш взгляд,

<md-grid-tile class="gray" ng-repeat="carto in cartoListFiltered()">
         <md-button ng-click="changeSVG(carto.fileName)" aria-label="carto.displayName">
             <img src="style/images/thumbnails/{{carto.fileName}}.png" width="100%" height="100%" title="{{carto.fullDisplayName}}" style="max-height: 220px;"></img>
         </md-button>
         <md-grid-tile-footer><h3 align="center">{{carto.displayName}}</h3> </md-grid-tile-footer>
</md-grid-tile>

Это запускает ваш $scope.search против каждого отдельного carto и включает только carto которая возвращает true. То же, что и ng-if за исключением того, что логика выполняется на контроллере (где это должно быть)

  • 0
    Не уверен, что понимаю, как эту функцию можно использовать в качестве контейнера ng-repeat . Моя функция поиска принимает только один элемент cartoList качестве параметра и возвращает true, если она соответствует поиску, в зависимости от различных параметров поиска, которые можно изменить в представлении.
  • 0
    filter @Ellone выполняет search один раз для каждого элемента в cartoList - так же, как ng-if делал ng-if . Единственная разница в том, что у вас будет множество carto где будут соответствовать только критерии
Показать ещё 2 комментария

Ещё вопросы

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