Принудительный вызов фильтра для углового повторения

У меня есть это:

     <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>

Другие вопросы по тегам