首页 > 代码库 > Angularjs[6] - $scrope 中 $apply 方法:

Angularjs[6] - $scrope 中 $apply 方法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <div ng-app>
        <div ng-controller="firstController">
            {{date}}
        </div>
    </div>
    <script type="text/javascript" src="app/index.js"></script>
<script type="text/javascript" src="../../vendor/angular/angularjs.js"></script>
</body>
</html>
var firstController = function ($scope) {
    //$scope 作用域
    //申明一个model
    $scope.date = new Date();
// setInterval(function () { // //这里虽然变化,但是没有触发 脏检查 // $scope.date = new Date(); // },1000) setInterval(function () { $scope.$apply(function () { $scope.date = new Date(); }) },1000) };
  • 脏检查:将原对象复制一份快照,在某个时间,比较现在对象与快照的值,如果不一样就表明发生变化。
  • Angular 通过脏检查得知变量是否发上变化。

      Angular 脏检查 策略:

        - 不会脏检查所有的对象,当对象被绑定到html中,这个对象添加为检查对象(wetcher)。

        - 不会脏检查所有的属性,同样当属性被绑定后,这个属性会被列为检查的属性。

        Angular程序初始化时,会将绑定的对象的属性添加为监听对象(watcher),也就是说一个对象绑定了N个属性,就会添加N个 watcher。

  • 手动触发脏检查:$apply 进入 angular context,然后通过 $digest 去触发脏检查,推荐给 $apply 参数,否则会检查该 $scope 里所有监听的属性。
  • 不建议直接调用 $digest() 属性,而应使用 $apply()。

Angularjs[6] - $scrope 中 $apply 方法: