Angular的脏检查

1.双向数据绑定。1.1.将数据传递出去:可以通过点击事件等。1.2.数据的呈现:将传递回来的数据进行打印呈现;

 绑定事件函数

function bind() {
        var list = document.querySelectorAll('[ng-click]');
        for (var i = 0, l = list.length; i < l; i++) {
            list[i].onclick = (function(index) {
                return function() {
                    var func = this.getAttribute('ng-click');
                    Scope[func](scope);
                    apply();
                }
            })(i);
        }
    }

scope[x](scope):改变数据;

apply():将数据显示到视图

function apply() {
        var list = document.querySelectorAll('[ng-bind]');
        for (var i = 0, l = list.length; i < l; i++) {
            var bindData = list[i].getAttribute('ng-bind');
            list[i].innerHTML = scope[bindData];
        }
    }
2.脏检测

 脏检测是什么?在双向钩子中加上检测,检查新的值和旧的值是否相等,如果相等则apply();否则将新值赋给旧值;再次检测;

定义构造函数:

function $scope(){
  this.$$watchList=[];
};
$scope.prototype.$watch=fucntion(name,watcher,listener){
  var watch={
    name:name,
    watcher:watcher,
    listener:listener
  };
  this.$$watchList.push(watch);
};
$scope.prototype.$digest=function(){
  var dirty=true;
  while(dirty){
    dirty=false;
    var list=this.$$watchList;
    for(var i=0,l=list.length;i<l;i++){
       var watch=list[i];
       var newValue=watch.getNewValue();
       var oldValue=watch.last;
       if(newValue==oldValue){
          watch.listener(newValue,oldValue);
          dirty=true;
       }else{
           scope[watch.name]=newValue;
        }
        watch.last=newValue;
    }
  }
}
 我们还可以在$digest中加入安全机制防止死机。限定循环次数即可;

 实例化对象:

var scope=new $scope();
 建立检测对象

scope.$watch("sum",function(){
  scope.sum=Scope.data*3
},function(){
  console.log("我是监测事件")
})

3.对于初始化对象

var Scope={
  data:0,
}
 当然你可以在Scope对象中写入多个值








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值