AngularJS $watch变量监视

简介:

在使用AngulaJS编写应用时,我们经常需要做的一件事情就是对模型中的变量进行监视,并对其发生的变化做出相应的回应。如:购物车小计。

AngularJS为我们提供了一个非常方便的$watch方法,它可以帮助我们在每个scope中监视其中的变量。下面是一个非常简单的例子:

Java代码   收藏代码
  1. $scope.name = 'zhangsan';  
  2.   
  3. $scope.count = 0;  
  4.   
  5. $scope.cart = [  
  6.     {id:1,name:'iphone5s',quantity:3,price:4300},  
  7.     {id:2,name:'iphone5c',quantity:30,price:3300},  
  8.     {id:3,name:'mac',quantity:3,price:14300},  
  9.     {id:4,name:'ipad',quantity:100,price:2000}  
  10. ];  
  11.   
  12. // 监听一个model 当一个model每次改变时 都会触发第2个函数  
  13. $scope.$watch('name', function(newValue, oldValue) {  
  14.     // console.log(newValue+ '===' +oldValue);  
  15.     ++$scope.count;  
  16.   
  17.     if ($scope.count > 3) {  
  18.         $scope.name = '已将大于3次了';  
  19.     }  
  20. });  
  21.   
  22. $scope.$watch('cart', function(newValue, oldValue) {  
  23.     // console.log(newValue);  
  24.     angular.forEach(newValue, function(item, key) {  
  25.         if(item.quantity < 1) {  
  26.             var returnKey = confirm('是否从购物车内删除该产品');  
  27.             if(returnKey) {  
  28.                 $scope.remove(item.id);  
  29.             }else{  
  30.                 item.quantity = oldValue[key].quantity;  
  31.             }  
  32.             return ;  
  33.         }  
  34.     });  
  35. }, true); ////检查被监控的对象的每个属性是否发生变化  

上面的这段代码非常简单,它用$watch来对$scope中的name进行监视,并在它发生变化的时候将$rootScope中的count属性增加1。因此,每当我们对name进行一次修改时,下面显示的change count数字就会增加1,当count>3时,改变name的值。

在AngularJS内部,每当我们对ng-model绑定的name属性进行一次修改,AngularJS内部的$digest就会运行一次,并在运行结束之后检查我们使用$watch来监视的东西,如果和进行上一次$digest之前相比有了变化,则执行我们在其中绑定的处理函数。

相关文章
|
12天前
|
存储 JavaScript 前端开发
AngularJS指令的隔离作用域:深入理解指令的scope选项
【4月更文挑战第28天】本文探讨了AngularJS指令的隔离作用域,它是创建可重用组件的关键。隔离作用域通过scope选项实现,有false、true和对象三种模式。当scope为对象时,指令拥有独立作用域,不继承父作用域属性。@、=和&符号用于绑定隔离作用域与父作用域间的属性。隔离作用域适用于组件封装和复杂逻辑隔离,提高应用的可维护性。遵循最佳实践,如避免直接操作父作用域、清晰定义绑定和处理销毁,能构建更健壮的AngularJS应用。
|
1月前
【实用】Angular中如何实现类似Vuex的全局变量状态变化功能?
【实用】Angular中如何实现类似Vuex的全局变量状态变化功能?
|
6月前
|
JavaScript UED SEO
Angular 应用启用服务器端渲染后 Ngrx store 和 re-hydration 的交互关系
Angular 应用启用服务器端渲染后 Ngrx store 和 re-hydration 的交互关系
34 1
|
监控 JavaScript 前端开发
angularJS学习小结——$apply方法和$watch方法
angularJS学习小结——$apply方法和$watch方法
90 0
angular16-$watch监视数据变化
angular16-$watch监视数据变化
81 0
angular16-$watch监视数据变化
Angular jasmine如何从detectChange触发refreshView进而执行到Component的hook实现
Angular jasmine如何从detectChange触发refreshView进而执行到Component的hook实现
102 0
Angular jasmine如何从detectChange触发refreshView进而执行到Component的hook实现
调试Angular指令实现时一个有用的内部属性:__ngContext__
调试Angular指令实现时一个有用的内部属性:__ngContext__
481 0
调试Angular指令实现时一个有用的内部属性:__ngContext__
优化Angularjs的$watch方法
Angularjs的$watch相信大家都知道,而且也经常使用,甚至,你还在为它的某些行为感到恼火。比如,一进入页面,它就会调用一次,我明明希望它在我初始化之后,值再次变动才调用。这种行为给我们带来许多麻烦。
2126 0