AngularJs Сначала в массиве после фильтра - программирование
Подтвердить что ты не робот

AngularJs Сначала в массиве после фильтра

В моем контроллере я могу позвонить:

$scope.list[0];

Чтобы получить доступ к первому элементу в моем массиве. Есть ли способ сделать это с учетом фильтров.

Например, у меня есть:

filter:search

В моем повторении, как я могу вызвать $scope.list [0]; для выравнивания первого результата поиска?

4b9b3361

Ответ 1

Это можно сделать, введя зависимость фильтра в контроллер и вызывая его в коде, например

var filteredArray = filterDependency(arrayToFilter,args);

который возвращает новый, фильтрованный массив. Поскольку вы используете фильтр "фильтр" (это фильтр, имя которого является фильтром), инъекция зависимостей должна быть filterFilter. Ваш контроллер должен выглядеть примерно так:

var app = angular.module('myapp',[]);
app.controller('ctrlParent',function($scope,filterFilter){
    var filteredArray = [];
    $scope.list = ["abc","def","ghi","abcdefghi"];
    $scope.$watch('search',function(newValue){
       filteredArray = filterFilter($scope.list, newValue);
       // do something with the first result
       console.log(filteredArray[0]); // first result
    });    
});

Что мы делаем, это установить часы на модели ввода (search), чтобы мы могли получить новое значение и повторно фильтровать массив при каждом изменении ввода.


И

Если вам нужно получить доступ к индексу ng-repeat из представления, вы можете использовать специальное свойство $index внутри ng-repeat, как:

<div ng-repeat="item in list | filter:search">
    {{$index}}
</div>

Вы также можете использовать $first, $middle и $last как показано в этом документе Angular.

Демо: Вот скрипка

Ответ 2

Не имеет доступ к скобкам. Если у вас есть ng-repeat с фильтром:

ng-repeat="thing in things | filter:search"

Отфильтрованный список здесь является анонимным - у него нет имени, доступ к которому вы можете получить.

Тем не менее, если вы посмотрите на docs для ngRepeat, вы увидите, что внутри каждой области репитера у вас есть доступ к $index, $first, $middle и $last.

Так что-то вроде

<body ng-app="App" ng-controller="Main">
    <pre ng-repeat="n in nums | filter:isOdd">
        n={{n}}:index={{$index}}:first={{$first}}:middle{{$middle}}:last={{$last}}
    </pre>
</body>

Допустим:

    n=1:index=0:first=true:middlefalse:last=false

    n=3:index=1:first=false:middletrue:last=false

    n=5:index=2:first=false:middlefalse:last=true

Fiddle

Ответ 3

Используете ли вы "ng-repeat"? Если так, взгляните на свойства $first, $index, $middle и $last. Это позволит вам получить информацию о конкретном элементе из повтора.

Подробнее здесь: http://docs.angularjs.org/api/ng.directive:ngRepeat