2013-10-21 2 views
13

Also habe ich eine Weile versucht, einen benutzerdefinierten Filter zu erstellen, der nach den Parametern 'Startswith' und nicht nach 'Contains' sucht. Jeder Filter, den ich geschrieben habe, scheint nicht richtig zu funktionieren. Hier ist ein Beispiel dafür, was ich versuche zu erreichen --->http://jsfiddle.net/DMSChris/9ptr9/Angular JS 'Startswith' benutzerdefinierten Filter

function FilterCtrl() { 
var scope = this; 
scope.doFilter = function(elem) { 
    if(!scope.searchText) return true; 
    return elem.last_name.toLowerCase().indexOf(scope.searchText.toLowerCase()) == 0; 
}; 

}

http://jsbin.com/OyubElO/1/edit - Hier ist, wo ich jetzt bin.

<ul border="1px" ng-repeat="msg in messages | filter:search:strict"> 

<li>{{msg.last_name}}</li> 

Jede Hilfe würde sehr geschätzt werden!

+0

Wenn 'elem.last_name' kann eine lange Zeichenfolge sein, Sie Kürzen betrachten wünschen können und dann zu vergleichen mit' '=== dem Text –

Antwort

30

Eine einfache Möglichkeit ist das Hinzufügen einer neuen Methode zu Ihrem Bereich.

$scope.startsWith = function (actual, expected) { 
    var lowerStr = (actual + "").toLowerCase(); 
    return lowerStr.indexOf(expected.toLowerCase()) === 0; 
} 

Dann ändern Sie die Filtersyntax für Ihr Element.

<ul border="1px" ng-repeat="msg in messages | filter:search:startsWith"> 

Hier ist ein working plunkr mit dem obigen Beispiel.

+0

Dies gilt nicht zu finden arbeite für mich – Robin

+0

@Robin Ich habe eine Plunkr mit dem Beispiel hinzugefügt. Was hat nicht für dich funktioniert? – mark

+0

@mark Plunkr scheint nicht da zu sein. Aber das hat für mich funktioniert !! – Shadow

3

Filter in Objekt

$scope.fmyData = $filter('filter')($scope.AllMyData, $scope.filterOptions,function (actual, expected) { 
        return actual.toLowerCase().indexOf(expected.toLowerCase()) == 0; 
       }); 
+0

Hi @ user35 .., bitte irgendeinen funktionierenden Plünderer? es braucht mich wirklich. Danke. – Venki