angular $apply和$watch

  $apply使用情景

  angularjs 外部的控制器(DOM 事件、外部的回调函数如 jQuery UI 空间等)调用了AngularJS 函数之后,必

须调用$apply。在这种情况下,你需要命令 AngularJS 刷新自已(模型、视图等),$apply就是用来做这件事情

的。我们在使用$apply这个方法的时候,只要可以,请把要执行的代码和函数传递给$apply 去执行,而不要自已执

行那些函数然后再调用$apply。

  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  5.     <title>RunJS</title>  
  6.     <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>  
  7.   
  8.     <script src="http://cdn.bootcss.com/angular.js/1.2.9/angular-route.min.js"></script>  
  9.     <script src="serviceJS01.js"></script>  
  10. </head>  
  11. <body ng-app="myApp" >  
  12. <div ng-controller="firstController" ng-click="show()">  
  13. {{name}}  
  14.     {{age}}  
  15. </div>  
  16.   
  17. </body>  
  18. </html>  
  19.   
  20. <script>  
  21.     var app = angular.module("myApp",[]);  
  22.     app.controller('firstController',function($scope,$timeout){  
  23.         setTimeout(function(){  
  24.             $scope.$apply(function(){  
  25.                 $scope.name="李四";  
  26.             })  
  27.         },2000);  
  28.         $scope.name="张三";  
  29.         $scope.age='10';  
  30.         $scope.show=function(){  
  31.             $scope.name='点击后的name';  
  32.         }  
  33.     $timeout(function(){  
  34.         $scope.age='50';  
  35.     },2000);  
  36.     })  
  37. </script>  

在上面代码中如果我们不使用$apply来传播name值的改变,而是直接将$scope.name="李四"这句代码写在s

etTimeout函数中,界面上显示的值根本就不会改变。

原文地址:https://www.cnblogs.com/joesbell/p/7002018.html