$apply使用情景
angularjs 外部的控制器(DOM 事件、外部的回调函数如 jQuery UI 空间等)调用了AngularJS 函数之后,必
须调用$apply。在这种情况下,你需要命令 AngularJS 刷新自已(模型、视图等),$apply就是用来做这件事情
的。我们在使用$apply这个方法的时候,只要可以,请把要执行的代码和函数传递给$apply 去执行,而不要自已执
行那些函数然后再调用$apply。
- <!DOCTYPE html>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>RunJS</title>
- <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
- <script src="http://cdn.bootcss.com/angular.js/1.2.9/angular-route.min.js"></script>
- <script src="serviceJS01.js"></script>
- </head>
- <body ng-app="myApp" >
- <div ng-controller="firstController" ng-click="show()">
- {{name}}
- {{age}}
- </div>
- </body>
- </html>
- <script>
- var app = angular.module("myApp",[]);
- app.controller('firstController',function($scope,$timeout){
- setTimeout(function(){
- $scope.$apply(function(){
- $scope.name="李四";
- })
- },2000);
- $scope.name="张三";
- $scope.age='10';
- $scope.show=function(){
- $scope.name='点击后的name';
- }
- $timeout(function(){
- $scope.age='50';
- },2000);
- })
- </script>
在上面代码中如果我们不使用$apply来传播name值的改变,而是直接将$scope.name="李四"这句代码写在s
etTimeout函数中,界面上显示的值根本就不会改变。