Ответ 1
Это можно сделать, введя зависимость фильтра в контроллер и вызывая его в коде, например
var filteredArray = filterDependency(arrayToFilter,args);
который возвращает новый, фильтрованный массив. Поскольку вы используете фильтр "фильтр" (это фильтр, имя которого является фильтром), инъекция зависимостей должна быть filterFilter
. Ваш контроллер должен выглядеть примерно так:
var app = angular.module('myapp',[]);
app.controller('ctrlParent',function($scope,filterFilter){
var filteredArray = [];
$scope.list = ["abc","def","ghi","abcdefghi"];
$scope.$watch('search',function(newValue){
filteredArray = filterFilter($scope.list, newValue);
// do something with the first result
console.log(filteredArray[0]); // first result
});
});
Что мы делаем, это установить часы на модели ввода (search
), чтобы мы могли получить новое значение и повторно фильтровать массив при каждом изменении ввода.
И
Если вам нужно получить доступ к индексу ng-repeat
из представления, вы можете использовать специальное свойство $index
внутри ng-repeat
, как:
<div ng-repeat="item in list | filter:search">
{{$index}}
</div>
Вы также можете использовать $first
, $middle
и $last
как показано в этом документе Angular.
Демо: Вот скрипка