0

我有这个:

     <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()适用于此。

4

1 回答 1

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>

于 2017-04-20T05:51:31.367 回答