我们可以在angularjs中全局更改ng

时间:2013-07-14 16:59:03

标签: angularjs

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

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

3 个答案:

答案 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);
   }     
})

PS。

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