Я довольно новый в 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
Существует stackexchange сайт для [обзоров кода] (http://codereview.stackexchange.com) –
http://jsbin.com/gifatoyilo/1/edit?html,js,output –
@PatrickEvans спасибо, я действительно не знал – user33