强制调用 Angular ng-repeat 的过滤器
Force call of filter for Angular ng-repeat
我有这个:
<div class="row" ng-repeat="(promptId, q) in (categoryFilteredObj
= (categoryObj | custom:searchText:selectAllCheckbox:answeredCheckbox))">
一切正常。
但是过滤器似乎只在 searchText
更改时被调用。
如何强制对过滤器进行评估?我可以更改 searchText "artificially",但这不是正确的方法。
我希望如果我更改 -
的值
selectAllCheckbox
或
answeredCheckbox
过滤器将被重新评估,但事实并非如此!
换句话说:我想做的是重新调用这个 ng-repeat 功能,以便重新评估过滤器,因为我刚刚进行了更改到我的程序中的状态,并且我希望更改对象列表以反映状态更改。然而,目前 ng-repeat 列表没有改变,过滤器也没有被命中(我检查了日志)。我想以某种方式 "force" 重新评估 ng-repeat 和过滤器。我认为 $scope.$apply()
不适合这个。
它对我来说很好用。可能你犯了逻辑错误或过滤器的代码抛出错误或过滤器的参数实际上没有改变:
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>
我有这个:
<div class="row" ng-repeat="(promptId, q) in (categoryFilteredObj
= (categoryObj | custom:searchText:selectAllCheckbox:answeredCheckbox))">
一切正常。
但是过滤器似乎只在 searchText
更改时被调用。
如何强制对过滤器进行评估?我可以更改 searchText "artificially",但这不是正确的方法。
我希望如果我更改 -
的值selectAllCheckbox
或
answeredCheckbox
过滤器将被重新评估,但事实并非如此!
换句话说:我想做的是重新调用这个 ng-repeat 功能,以便重新评估过滤器,因为我刚刚进行了更改到我的程序中的状态,并且我希望更改对象列表以反映状态更改。然而,目前 ng-repeat 列表没有改变,过滤器也没有被命中(我检查了日志)。我想以某种方式 "force" 重新评估 ng-repeat 和过滤器。我认为 $scope.$apply()
不适合这个。
它对我来说很好用。可能你犯了逻辑错误或过滤器的代码抛出错误或过滤器的参数实际上没有改变:
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>