脏检查详解编程语言

首先解释一下什么是脏检查:在angular中,数据绑定到html中后,这个数据改变了,需要检查刷新,这就触发了脏检查。

Angular中的数据是双向绑定的,那么我们怎么知道数据是否是变化了呢?

1、首先能通过固定的接口才能改变变量的值,比如说只能通过set()设置变量的值,set被调用的时候比较一下就知道了。这种方法的缺点是写法比较繁琐。
2、脏检查,将原对象复制一份,在某个时间,比较现在对象与原对象的值,如果不一样就表明发生了变化,这个策略要保留两份变量,而且要遍历对象,比较每个属性,这样会有一定的性能问题。
angular使用的就是脏检查:
1、不会脏检查所有的对象。当对象被绑定到html中后,这个对象才会添加为检查对象(watcher)
2、不会脏检查所有的属性,同样当属性被绑定后,这个属性才会被列为检查的属性
在angular程序初始化时,会将绑定的对象的属性添加为监听对象(watcher),也就是说一个对象绑定了N个属性,就会添加N个watcher。
angular什么时候去脏检查呢?angular所系统的方法中都会触发比较事件,比如:controller初始化的时候,所有以ng-开头的事件爱你执行后,都会出发脏检查
必要的时候我们要手动的触发脏检查:$apply仅仅只是进入angular context,然后通过$digest触发脏检查
$apply如果不给参数的话,会检查该$scope里的所有监听的属性。
下面给一个demo:

<body> 
<input type="text" ng-model="type1" /> 
<p>{{type1}}</p> 
</body> 
<script type="text/javascript"> 
 
        var app = angular.module("myApp", ["ngSanitize"]); 
        app.controller("firstVC", function($scope, $http) { 
            $scope.type1 = "top"; 
            $scope.newNum = 0;         
         
            $scope.$watch(' type1', function(newValue, oldValue) { 
                console.log(newValue+" "+oldValue); 
            }); 
        }) 
</script>

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/13879.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论