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对象中写入多个值
3152

被折叠的 条评论
为什么被折叠?



