我有一个ng-repeat
循环使用过滤器的资源对象数组,就像这样。
<div ng-repeat='item in items | filter: { hidden: false}'>
<div my-custom-directive ng-model='item'></div>
</div>
然后,在指令中,我想监视每个资源对象的变化。
myApp.directive('myCustomDirective', function(){
return {
restrict: 'A',
replace: true,
scope: {
myDirectiveItem: '=ngModel'
},
template: '<button ng-click="myCustomDirective.hidden = true">Hide</button>',
link: function(scope) {
scope.$watch('myDirectiveItem', function(oldValue, newValue){
console.log('I have changed'); // Never called
}, true);
}
};
});
但$ watch回调永远不会被称为更改对象。我假设这是因为,在循环中,过滤器优先,因此监视的资源对象不再在该范围内可用。
如何在从集合中删除对象之前强制执行$ watch回调?
//编辑
我想指出,如果我在代码中删除| filter: { hidden: false }
,一切都按预期工作,并显示I have changed
。它只适用于过滤器。
答案 0 :(得分:0)
你可以尝试这个:
myApp.directive('myCustomDirective', function(){
return {
restrict: 'A',
replace: true,
scope: {
myDirectiveItem: '=ngModel'
},
template: '<button ng-click='item.hidden = true'>Hide</button>',
link: function(scope) {
// check that all items in ng-repeat loaded
if (scope.$last) {
// watch scope.myDirectiveItem
scope.$watch(scope.myDirectiveItem, function(oldValue, newValue){
console.log('I have changed'); // Never called
}, true);
}
}
};
});