2015-10-23 3 views
2

Я довольно новый в Angular, и я ищу более элегантный способ решить эту задачу.ищет более элегантный способ решить эту задачу

Код ниже подходит, но я не уверен, что это правильный способ сделать это.

HTML

<div ng-app="ngFilterApp" ng-controller="namesCtrl"> 
    <p>Filtering input:</p> 

    <p><input type="text" ng-model="search" /></p> 
    <ul> 
     <li ng-repeat="x in names | myFilter"> 
      {{ x.name + ', ' + x.country }} 
     </li> 
    </ul> 
</div> 

JS

var searchVal; 
angular.module('CustomFilterModule', []) 
    .filter('myFilter', function() { 
    return function(input) { 
    searchVal = searchVal || ''; 
    var s = searchVal.toLowerCase(); 
    var arr = []; 
    for (var i = 0; i < input.length; i++) { 
     if(input[i].name.toLowerCase().indexOf(s) === 0 || input[i].country.toLowerCase().indexOf(s) === 0) arr.push(input[i]); 
    } 

    return arr; 
    }; 
}); 

angular.module('ngFilterApp', ['CustomFilterModule']) 
    .controller('namesCtrl', function($scope) { 
    $scope.names = [ 
    {name:'Moscow',country:'Russia'}, 
    {name:'Kiev',country:'Ukraine'}, 
    {name:'Yerevan',country:'Armenia'}, 
    {name:'Washington',country:'USA'}, 
    {name:'Madrid',country:'Spain'}, 
    {name:'Tbilisi',country:'Georgia'} 
    ]; 

    $scope.$watch('search', function() { searchVal = $scope.search; }, true); 
}); 

JSBINhttp://jsbin.com/bomotocota/edit?html,js,output

+1

Существует stackexchange сайт для [обзоров кода] (http://codereview.stackexchange.com) –

+0

http://jsbin.com/gifatoyilo/1/edit?html,js,output –

+0

@PatrickEvans спасибо, я действительно не знал – user33

ответ

Смежные вопросы