我的表单中有5个文本框,我想在更改任何文本框的内容时触发ng-change。现在我的问题是“而不是为5个文本框写入ng-change 5次,是有没有办法在全局中写入ng-change,即在表单标签中,这样如果任何文本框内容与表单相应的ng-change函数应该被触发
任何人都可以帮助我.....
答案 0 :(得分:2)
我会在模型的那一部分做一个$ watch表达式。请参阅documentation for $watch。
答案 1 :(得分:1)
我同意marko最简单的方法是使用$ watch。
$scope.$watch('area1 + area2 + area3 + area4 + area5', function (newVal, oldVal) {
if(oldVal && newVal !== oldVal) {
console.log('Changed')
}
});
这是Plunker
答案 2 :(得分:0)
我有一个类似的情况,当我有一个包含数百个输入的网格时,输入是动态的,我需要在输入改变后自动保存数据
我在包装器主体上使用了香草onChange
,然后检查了目标值。
<div class="wrapper" onchange="onChangeHanler(event)">
<input ng-repeat="item in items" ng-model="item.value">
</div>
在我的控制器中:
angular.controller('gridController', function($scope) {
// this method belongs to window and not the current $scope, remember we are breaking ng rules here :(
window.onChangeHandler = function(ev) {
console.log(ev.target.value) // print out the value changed
queueForAutoSave($scope.items);
}
})
Downvoters我知道这不是实现这个的最佳方式,因为它反对角度规范,并导致单元测试等问题...,
但就目前而言,在性能方面,它比将ng-change
绑定到数百个输入要好100倍