2016-04-18 8 views
1

Ich habe eine schöne Wiederholung, die eine Spalte enthält, die mit einem Fremdschlüsselelement verbunden ist, so dass es so aussieht, das mit einer Suche erweitert werden soll.Verwenden Sie NG-Repeat-Ausdruck als Filterwert

<input type="text" ng-model="search" placeholder="Search On Studio Name"> 

<div ng-repeat="cd in cds | filter : search"> 
<div>{{cd.colorcode;}}</div> 
<div>{{cd.studio[0].name}}</div> 
</div> 

Das Problem ist, ich habe nicht das gefilterte Ergebnis auf dem Studio-Namen erhalten, wenn ich versuche, als Beispiel hinzuzufügen:

| filter : search.{cd.studio[0].name} 

Wie nähere ich diese zweiten verbunden Fremdschlüsselspalt?

Als separate Frage möchte ich die Ergebnisse auch mit einem Klick als solcher (if/else) filtern, also wenn ich den Knopf drücke, bekomme ich alle "cd.studio [0] .name" direkt mit dem ersten Buchstaben A gefiltert, mit einem Knopf wie diese

<button ng-click="letter='[A]'">A</button> 
| filter : search.{cd.studio[0].name} OR letter: StartsWith 

Antwort

3

Pass eine Prädikatfunktion zum Filter und implementieren dieses Prädikat Funktion in der Steuerung:

<div ng-repeat="cd in cds | filter : isAccepted"> 

$scope.isAccepted = function(cd) [ 
    return (cd.studio[0].name.toLowerCase().indexOf($scope.search.toLowerCase()) >= 0 || 
      ...); 
}; 
+0

es einen Fehler auf dem toLowerCase erwähnt() –

+1

Wenn nur Fehler mit einer kam Fehlermeldung ... Wir könnten wissen, was das Problem ist, anstatt zu raten. Geben Sie die Fehlermeldung ein. –

+0

hahaha ok ok true, hier ist es: angular.js: 9997 TypeError: Kann die Eigenschaft 'toLowercCase' von undefined nicht lesen - Ich habe das zur Funktion js: $ scope.isAccepted = hinzugefügt (Film) { return (movie.ProgramMetadata [0] .ProgramName.toLowerCase(). IndexOf ($ scope.search.toLowercCase())> = 0); }; –

0

Sie die Filter verwenden sollten wie folgen:

<input type="text" ng-model="search.studio[0].name" placeholder="Search On Studio Name"> 

<div ng-repeat="cd in cds | filter : search"> 
    <div>{{cd.colorcode;}}</div> 
    <div>{{cd.studio[0].name}}</div> 
</div> 

und wenn Sie wollen, dies implementieren mit einem Tastenklick:

<input type="text" ng-model="originalSearch.studio[0].name" placeholder="Search On Studio Name"> 
<button ng-click="searchFunc()" > Search it!</button> 
<div ng-repeat="cd in cds | filter : finalSearch"> 
    <div>{{cd.colorcode;}}</div> 
    <div>{{cd.studio[0].name}}</div> 
</div> 

in Controller:

$scope.searchFunc = function(){ 
    $scope.finalSearch = $scope.originalSearch; 
} 
+0

Ich hatte dies ((ng-model = "search.studio [0] .name")) vorher auch, aber es gibt mir einen Fehler eine solche "angular.js: 9997 TypeError: Kann Eigenschaft 'Name' von undefined nicht lesen" –

+0

Sind Sie sicher, dass 'cd.studio [0]' existiert? versuche 'console.log (cds)'? –

+0

ja es existsm ich bekomme die Daten korrekt in der ng-Wiederholung, wenn ich nur suche, aber ich denke, es sucht alle verfügbaren Daten seit viele Male sieht es aus wie es keinen Sinn ergibt, also würde ich nur auf den Studio-Namen suchen . –