1

Hier wird die Idee von meinem Problem:AngularJS filtern mehrere Wörter aus einer Zeichenkette in einem einzigen Feld

Stellen Sie sich vor, ich habe einen Benutzer für ein Buch suchen.

Als Eingabe kann er versuchen, das Buch mit Buchtitel zu finden.

nehmen Lassen Sie sich:

$scope.books = ["Heir Of Earth", 
    "Woman Of The Solstice", 
    "Hunters Of Next Year", 
    "Pilots Without Honor", 
    "Slaves And A Woman", 
    "Kings And Heroes", 
    "Decay Of The End", 
    "Fortune Of The Land", 
    "Rejecting My Dreams", 
    "Painting The Angels"]; 

Jetzt nehme ich die Benutzerabfrage in einem String:

Beispiel:

$scope.userQueryTitle = "Woman Of"; 

Ich möchte alle Bücher bekommen, was, wo ihr Titel enthält "Frau" oder "Of" aber NICHT "Woman" UND "Of".

Von dort das entsprechende Ergebnis dieser sein sollte:

$scope.booksResult = ["Heir Of Earth", 
"Woman Of The Solstice", 
"Hunters Of Next Year", 
"Slaves And A Woman", 
"Decay Of The End", 
"Fortune Of The Land" 
]; 

ich einige Teillösungen für mein Problem gefunden, wie die Verwendung so etwas wie:

Ausblick:

<ul ng-repeat="book in booksResult | filter: getBooksFromTitle"> 
    <li>{{book}}</li> 
</ul> 

Controller:

$scope.getBooksFromTitle = function(book){ 
    return book.match(($scope.userQueryTitle).split(" ")[0]) || 
     book.match(($scope.userQueryTitle).split(" ")[1]); 
}; 
nur

Es funktioniert, wenn $scope.userQueryTitle enthält nur zwei Worte, sondern mein Problem ist was ist, wenn ich oder oder n (e) haben?

getBooksFromTitle() sollte über diese flexibel sein, aber ich sehe nicht, wie zu behandeln ...

Jeder Vorschlag?

Danke!

+0

Sie können versuchen, den folgenden Ansatz ... In Ihrer Methode GetBooksFromTitle können Sie $ scope.userQueryTitle in ein Array konvertieren und Vergleich von zwei Arrays. –

Antwort

0

Ändern der getBooksFromTitle Funktion wie folgt,

$scope.getBooksFromTitle = function(book){ 
    return $scope.books.filter(function(e){ return e.match(new RegExp($scope.query.split(" ").join('|'),'i')) }); 
}; 

versuchen, so viele Keywords, die Sie setzen wollen, sollte dies Ihr Problem lösen. Prost

+0

Vielen Dank! Es funktioniert, ich habe nur Schwierigkeiten mit der Tatsache, dass ich nicht ganz verstehe, was diese Codezeile macht. – Emidomh

2

Dies wird es für Sie tun:

$scope.getBooksFromTitle = function(book){ 
    var queryWords = $scope.userQueryTitle.split(" "); 
    for(var i=0;i<queryWords.length;i++){ 
     return book.match(queryWords[i]); 
    }   
}; 
+0

Nein, es funktioniert nicht, weil die Funktion stoppt, wenn das erste 'return book.match (queryWords [i]);' auftritt. Als Ergebnis bekomme ich nur ein Ergebnis. – Emidomh

Verwandte Themen