web-dev-qa-db-ja.com

Angular JS 'Startswith'カスタムフィルター

そのため、しばらくの間、「次を含む」ではなく、「開始」パラメーターを検索するカスタムフィルターを作成しようとしています。私が書いたすべてのフィルターが正しく機能していないようです。これが私が達成しようとしていることの例です---> http://jsfiddle.net/DMSChris/9ptr9/

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 -ここが私が今いるところです。

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

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

どんな助けでも大歓迎です!

14
Chris Pena

これを行う簡単な方法は、スコープに新しいメソッドを追加することです。

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

次に、要素のフィルター構文を変更します。

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

上記の例を使用した working plunkr です。

33
mark

オブジェクトでフィルター

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

これで、純粋なjavascript自体が文字列にstartsWith()メソッドを持ちます。ただし、IE11ではサポートされません。

こちらをご覧ください:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith

0
vissu