我的表单中有 5 个文本框,我想在更改任何文本框的内容时触发 ng-change。现在我的问题是“而不是为 5 个文本框编写 ng-change 5 次,有什么办法吗?全局写入ng-change,即在表单标签中,这样如果表单中的任何文本框内容都应该触发ng-change的相应功能
任何人都可以帮助我吗......
我的表单中有 5 个文本框,我想在更改任何文本框的内容时触发 ng-change。现在我的问题是“而不是为 5 个文本框编写 ng-change 5 次,有什么办法吗?全局写入ng-change,即在表单标签中,这样如果表单中的任何文本框内容都应该触发ng-change的相应功能
任何人都可以帮助我吗......
我会在模型的那部分做一个 $watch 表达式。请参阅$watch 的文档。
我同意 marko 的观点,最简单的方法是使用 $watch。
$scope.$watch('area1 + area2 + area3 + area4 + area5', function (newVal, oldVal) {
if(oldVal && newVal !== oldVal) {
console.log('Changed')
}
});
这是一个Plunker
当我有一个包含数百个输入的网格时,我有一个类似的情况,其中输入是动态的,并且我需要在输入更改后自动保存数据
我在包装体上使用了香草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 倍