2013-05-31 2 views
16

В моем контроллере я могу назвать:AngularJs Первый в массиве после фильтра

$scope.list[0]; 

Для доступа первый пункт в моем массиве. Есть ли способ сделать это, имея в виду фильтры.

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

filter:search 

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

+0

Я не 100% уверен, что вы просите ... Вы задаетесь вопросом, как вы можете сказать, если вы находитесь на первом элементе функции фильтра? – Polaris878

ответ

10

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

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, и $lastas shown in this Angular doc.

Demo: Here is a fiddle

+0

спасибо, первый из них больше того, что мне нужно – dab

+1

Первое - отличное решение. Хорошо продуманное и очень хорошее решение! Однако я до сих пор не понимаю, как появилась зависимость «filterFilter». – Neel

+1

Извините @Neel Я сейчас вижу этот комментарий! Мы вводили его при определении контроллера. Любой фильтр может быть введен таким образом «[filtername] Filter». Этот фильтр называется «фильтр», поэтому мы ввели его через 'filterFilter'. Другой случайный пример может ввести «dateFilter» или любой другой. – sh0ber

0

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

Для получения дополнительной информации ознакомьтесь здесь: http://docs.angularjs.org/api/ng.directive:ngRepeat

3

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

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

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

Тем не менее, если вы посмотрите на docs for 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

Смежные вопросы