2

我的表单中有 5 个文本框,我想在更改任何文本框的内容时触发 ng-change。现在我的问题是“而不是为 5 个文本框编写 ng-change 5 次,有什么办法吗?全局写入ng-change,即在表单标签中,这样如果表单中的任何文本框内容都应该触发ng-change的相应功能

任何人都可以帮助我吗......

4

3 回答 3

2

我会在模型的那部分做一个 $watch 表达式。请参阅$watch 的文档

于 2013-07-14T17:34:06.660 回答
1

我同意 marko 的观点,最简单的方法是使用 $watch。

$scope.$watch('area1 + area2 + area3 + area4 + area5', function (newVal, oldVal) {
  if(oldVal && newVal !== oldVal) {
    console.log('Changed')
  }
});

这是一个Plunker

于 2013-07-14T20:04:37.863 回答
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);
   }     
})

PS。

Downvoters 我知道这不是实现它的最佳方法,因为它反对角度规范,并导致单元测试出现问题等......,但现在就性能而言,它比绑定ng-change数百个输入要好 100 倍

于 2016-05-07T07:11:53.307 回答