Принудительный вызов фильтра для углового повторения
У меня есть это:
<div class="row" ng-repeat="(promptId, q) in (categoryFilteredObj
= (categoryObj | custom:searchText:selectAllCheckbox:answeredCheckbox))">
Все работает нормально. Но фильтр, кажется, вызывается только тогда, когда searchText
изменения.
Как я могу заставить фильтр быть оцененным? Я мог бы изменить searchText "искусственно", но это был бы неправильный способ сделать это.
Я надеюсь, что если я изменю значения для -
selectAllCheckbox
или же
answeredCheckbox
что фильтр будет переоценен, но это не так!
Другими словами: я хочу повторно вызвать эту функцию ng-repeat, чтобы фильтр был переоценен, потому что я только что внес изменения в состояние в моей программе и хочу, чтобы список объектов изменить, чтобы отразить изменение состояния. В настоящее время, однако, список ng-repeat не изменяется, и фильтр не попадает (я проверил логи). Я хотел бы как-то "заставить" ng-repeat и фильтр быть переоцененным. Я не думаю $scope.$apply()
работает для этого.
1 ответ
Это работает нормально для меня. Возможно, вы допустили логическую ошибку, или ошибка фильтра кода фильтра, или параметры фильтра фактически не были изменены:
angular.module('app', []).controller('MyController', ['$scope', function($scope) {
$scope.input = {}
}]).filter('myFilter', function(){
return function(input, param1, param2, param3){
input.param1 = param1;
input.param2 = param2;
input.param3 = param3;
return input
}
})
<script src="//code.angularjs.org/snapshot/angular.min.js"></script>
<body ng-app="app">
<div ng-controller="MyController">
<input type='text' ng-model='param1' ng-init='param1 = 1'/>
<input type='text' ng-model='param2' ng-init='param2 = 2'/>
<input type='text' ng-model='param3' ng-init='param3 = 3'/>
<ul>
<li ng-repeat='(key, val) in (obj = (input | myFilter : param1 : param2: param3))'>key: {{key}}, val: {{val}}</li>
</ul>
</div>
</body>