$apply()解释说明

2015-2-6    分类: angularjs笔记及案例

$apply()是用来告诉并提醒angular,在model上已经有更新了也请及时更新view。
那么我们什么时候使用$apply()?
例如:

angular.module('myApp',[]).controller('MessageController', function($scope) { 
 
  $scope.getMessage = function() { 
     setTimeout(function() { 
      $scope.message = 'Fetched after 3 seconds'; 
      console.log('message:'+$scope.message); 
     }, 2000); 
  } 
  $scope.getMessage(); 

});

我们使用的是setTimeout方法更新$scope.message的值,同时也希望更新的值在view也及时刷新,但是用这种方法view是不能及时更新的。因为angular并不知道$scope.message有更新。

这时候我们就使用$apply()了,将更改的数值写在$apply()里面,这样就能让angular知道$scope.message有变化也请及时更新view。例如:

angular.module('myApp',[]).controller('MessageController', function($scope) { 
 
   $scope.getMessage = function() { 
      setTimeout(function() { 
        $scope.$apply(function() { 
          $scope.message = 'Fetched after 3 seconds'; 
          console.log('message:' + $scope.message); 
         }); 
      }, 2000); 
   } 
 
  $scope.getMessage(); 
 
 });

如果是需要setTimeout()功能的话,其实推荐使用$timeout,因为它可以自动调用$apply()来提醒angular告诉有model变化了。

总结:需要记住的最重要的是AngularJS是否能检测到你对于model的修改。如果它不能检测到,那么你就需要手动地调用$apply()。