1

Ich bin ziemlich neu in eckigen, so meine Frage mag einfach oder dumm aussehen, aber ich habe keine Lösung gefunden. Ich habe eine Sammlung in meinem Controller (z. B. eine Sammlung von ganzen Zahlen) und ich möchte es filtern und Elemente für welche Bedingung wahr ist.Winkel benutzerdefinierte Filterung durch Bedingung in HTML funktioniert nicht

Zuerst habe ich versucht, dies:

<div>{{myCollection.find(item => item === 2)}}</div> 

und es hat nicht funktioniert. Dann fand ich einen anderen Ansatz (die eine Ich mag es nicht, weil ich immer nur einzelne Element haben zu zeigen, und es gibt keine Notwendigkeit, in peretition):

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

Und es funktioniert auch nicht. Hier ist JSBin mit meinen Bemühungen: http://jsbin.com/govovocace/1/edit?html,js,output

Gibt es eine mögliche Lösung meines Problems? Das benötigte Feld im Controller zu berechnen und an die View zu übergeben, passt mir leider nicht.

Antwort

1

Sie hatten syntaktische Fehler. Sie sollten keinen object Inside-Filter erwähnen, da Sie das tatsächliche Objekt, das Sie gerade durchlaufen, direkt filtern. Die letzte Option true ist, weil wir eine genaue Überprüfung durchführen werden.

HTML

<div ng-repeat="item in list | filter: 2: true"> 
    <div>{{item}}</div> 
</div> 

Demo Plunkr

+1

Vielen Dank! Es ist genau das, was ich gesucht habe! Ich wünschte, ich hätte genug Reputation, um deine Antwort zu verbessern und sie als akzeptiert zu markieren :) –

+0

Ich denke, du hast genug, Danke;) –

1

Sie können wie so eine Filterfunktion in Ihrem Controller definieren:

$scope.filterFn = function(val){ 
    return val === 2; 
}; 

Und dann in der Vorlage verwenden Sie es wie so:

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

Tha sagte, dies entspricht nur der Filterung Array zu Beginn, so bin ich mir nicht sicher, ob dies Ihren Bedürfnissen entspricht oder nicht. Wenn Sie einen bestimmten Anwendungsfall haben, ist dies nicht geeignet, lassen Sie mich in den Kommentaren wissen.

+0

Vielen Dank! Es funktioniert auch, aber Pankajs Antwort passt mir besser, weil ich Controller nicht ändere. Danke trotzdem! –

0

ich so etwas wie dieses

.controller('SomeController',function($scope){ 

// get the list from somewhere 
    $scope.list = [] // some array for instance 

    $scope.dataList = list.filter(function(i){ 
    return i.someVal==list.someVal; // condition that satisfy your req 
    }); 

}); 

getan hätte und es nun im Hinblick auf Verwendung als

<div ng-repeat=" item in dataList"> 
    {{item}} 
</div> 

Wenn Ihre Bedingung nur ein Ergebnis zurückgibt, dann können Sie

$scope.dataList = list.filter(function(i){ 
     return i.someVal==list.someVal; // condition that satisfy your req 
     })[0]; 
+0

Entschuldigung, diese Lösung passt nicht zu meinem Fall. Ich habe keine Daten in $ scope im Controller - es fügt es irgendwo später hinzu, also kann ich es nicht darin filtern. Ich weiß, es klingt seltsam, aber das ist wahr. –