2013-05-31 22 views
16

w moim kontrolera mogę zadzwonić:angularjs Pierwsze w tablicy po Filtr

$scope.list[0]; 

Aby uzyskać dostęp do pierwszego elementu w moim tablicy. Czy istnieje sposób, aby to zrobić, pamiętając o filtrach.

Na przykład mam:

filter:search 

Na moim powtórzenia, jak mogę zadzwonić $ scope.list [0]; aby wyrównać pierwszy wynik wyszukiwania?

+0

nie jestem w 100% pewien, o co prosicie ... Zastanawiasz się, w jaki sposób można stwierdzić, czy jesteś na pierwszym elemencie funkcji filtrującej? – Polaris878

Odpowiedz

10

To może być wykonane przez wstrzykiwanie zależność filtra do kontrolera i w kodzie jak

var filteredArray = filterDependency(arrayToFilter,args); 

która zwraca nowy, przesączono tablicy. Ponieważ używasz filtru "filtr" (jest to filtr, którego nazwa to filtr), wtrysk zależności powinien być filterFilter. Kontroler powinien wyglądać mniej więcej tak:

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 
    });  
}); 

Co robimy jest ustawienie zegarka w modelu wejściowego (search), dzięki czemu możemy uzyskać nową wartość i ponownie filtrować tablicę każdym razem, gdy wejście jest zmieniany .


także:

Jeżeli chcesz mieć dostęp do indeksu ng-repeat od wewnątrz widoku, można użyć właściwości szczególnej $index wewnątrz ng-repeat jak:

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

Można również używać $first, $middle i $lastas shown in this Angular doc.

Demo: Here is a fiddle

+0

dziękuję, że pierwsza jest bardziej tego, czego potrzebowałem. – dab

+1

Pierwsza z nich to doskonałe rozwiązanie. Dobrze przemyślane i bardzo dobre rozwiązanie! Jednak nadal nie rozumiem, w jaki sposób zależność "filterFilter" się tam dostała. – Neel

+1

Sorry @Neel Właśnie widzę ten komentarz! Wprowadziliśmy go podczas definiowania kontrolera. Dowolny filtr może być wtryśnięty w ten sposób "[filtername] Filter". Ten filtr ma nazwę "filter", więc wstawiliśmy go za pomocą 'filterFilter'. Inny losowy przykład może wstrzyknąć 'dateFilter' lub dowolną inną. – sh0ber

0

Używasz "ng-repeat"? Jeśli tak, spójrz na właściwości $ first, $ index, $ middle i $ last. Umożliwi to uzyskanie informacji o konkretnym przedmiocie z powtórzenia.

Aby uzyskać więcej informacji, zobacz najpierw tu: http://docs.angularjs.org/api/ng.directive:ngRepeat

3

Nie z dostępem do zamka. Jeśli masz ng-repeat z filtrem:

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

listę filtrowaną tutaj jest trochę anonimowy - nie ma nazwy, które można uzyskać dostęp.

Powiedział, że jeśli spojrzeć na docs for ngRepeat, zobaczysz, że w środku zakresu każdego uaktywnienia przemiennika za, masz dostęp do $index, $first, $middle i $last.

Więc coś

<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> 

przyniósłby:

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