我正在尝试在已过滤的数据列表中使用$ watch,但它似乎不起作用。这是我的代码片段。
HTML:
<div ng-repeat="dlr in dealers | filter : filterDealers ">
{{dlr.name}}
</div>
控制器
$scope.$watch('dealers', function () {
console.log('dealers was changed');
});
$scope.filterDealers = function (dlr) {
if (dlr.name = 'test') {
return true;
} else {
return false;
}
}
加载页面时会打印console.log,但如果我过滤列表,则不会打印。
答案 0 :(得分:1)
如果您只需要知道数据何时被过滤,只需过滤控制器中的经销商即可。
<div ng-repeat="dlr in filteredDealers ng-init=filterDealers>">
{{dlr.name}}
</div>
在您的控制器中执行:
$scope.filterDealer = function() {
$scope.filteredDealers = [];
for (var i=0; i<dealers.length; i++) {
var dlr = dealers[i];
if (dlr.name = 'test') {
$scope.filteredDealers.push(dlr);
}
}
// you know your filtering is done
console.log('dealers was changed');
}
答案 1 :(得分:0)
我认为您不希望在双向绑定$ scope变量上设置$watch
。如果你想在ng-repeat运行完毕后运行一个函数,你可以制作一个小指令并检查$last
这样的事情:
.directive('isLastItem', function () {
return {
restrict: 'A',
link: function (scope, element, attr) {
if (scope.$last === true) {
//run your logic here
}
}
}
然后是html
<div ng-repeat="dlr in dealers | filter : filterDealers " is-last-item>
现在 - 我不知道你希望这个逻辑发生在哪里,所以你可能希望$emit
从你的指令到你的控制器。