2013-05-31 18 views
16

Nel mio controller posso chiamare:AngularJs primi a matrice dopo Filtro

$scope.list[0]; 

per accedere al primo elemento nella mia matrice. C'è un modo per farlo tenendo presente i filtri.

Per esempio io ho:

filter:search 

Sul mio ripetizione, come posso chiamare $ scope.list [0]; per uguagliare il primo risultato di ricerca?

+0

Io non sono sicuro al 100% quello che si sta chiedendo ... Vi state chiedendo come si può dire se sei il primo elemento nella funzione filtro? – Polaris878

risposta

10

Questo può essere fatto iniettando dipendenza del filtro in un controllore e la chiamata in codice come

var filteredArray = filterDependency(arrayToFilter,args); 

che restituisce un nuovo array filtrato. Dato che stai usando il filtro "filtro" (è un filtro il cui nome è filtro), l'iniezione della dipendenza dovrebbe essere filterFilter. Il controller dovrebbe essere simile a questo:

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

Quello che stiamo facendo è la creazione di un orologio sul modello di ingresso (search) in modo che possiamo ottenere il nuovo valore e ri-filtro la matrice in qualsiasi momento si cambia l'ingresso .


anche:

Se è necessario accedere all'indice ng-repeat dall'interno della vista, è possibile utilizzare la proprietà speciale $index all'interno del ng-repeat come:

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

Puoi utilizzare anche $first, $middle e $lastas shown in this Angular doc.

Demo: Here is a fiddle

+0

grazie al primo è più di quello che mi serviva – dab

+1

Il primo è la soluzione eccellente. Ben pensato e un'ottima soluzione! Tuttavia, ancora non capisco come sia arrivata la dipendenza 'filterFilter'. – Neel

+1

Mi dispiace @Neel Sto solo ora vedendo questo commento! L'abbiamo iniettato durante la definizione del controller. Qualsiasi filtro può essere iniettato in questo modo "Filtro filtername". Questo filtro si chiama "filtro" quindi l'abbiamo iniettato tramite 'filterFilter'. Un altro esempio casuale potrebbe iniettare 'dateFilter' o qualsiasi altro. – sh0ber

0

Si sta utilizzando "ng-repeat"? Se è così, dai un'occhiata alle proprietà $ first, $ index, $ middle e $ last. Questo ti permetterà di ottenere informazioni sulla voce specifica dalla ripetizione.

Per ulteriori informazioni di controllo qui: http://docs.angularjs.org/api/ng.directive:ngRepeat

3

Non con accesso staffa. Se si dispone di un ng-repeat con un filtro:

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

L'elenco filtrato qui è una specie di anonimo - non ha un nome che è possibile accedere.

Detto questo, se si dà un'occhiata alla docs for ngRepeat, vedrete che all'interno di portata di ogni ripetitore, si ha accesso a $index, $first, $middle e $last.

Quindi qualcosa di simile

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

produrrebbe:

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

Problemi correlati