如果多个ngModel
值中的一个值发生更改而没有添加$scope.$watch
,是否可以调用函数?
改变这个:
<div>
<input ng-model="value1" ng-change="update()">
<input ng-model="value2" ng-change="update()">
</div>
到此:
<div ng-changes="update()">
<input ng-model="value1" >
<input ng-model="value2">
</div>
答案 0 :(得分:2)
受到ngChange
简单实现的启发,您可以遍历子树,收集所有ngModelControllers
并在$viewChangeListeners
中注册回调。
function ngChanges() {
return {
restrict: 'A',
link: function(scope, element, attr) {
Array.prototype.forEach.call(element[0].querySelectorAll("*"), function(e) {
var ngModel = angular.element(e).controller('ngModel');
if (ngModel) {
ngModel.$viewChangeListeners.push(function() {
scope.$eval(attr.onChanges);
})
}
})
}
}
};