前端数据绑定实现

VUE

// VUE
var App = {};
Object.defineProperty(App, 'test', {
get : function(){//取值时触发
console.log('get');
},
set : function(val){//赋值时触发,val可以是任意类型
console.log('set',val)
},
//writable : false,//是否为可写,false不可再赋值 设置该属性后 get和set不能再定义
configurable : true,//是否为可配置的  false不可更改配置 包括删除
enumerable : true//是否为可枚举的 flase是不可枚举,for in获取不到该属性
});

Angular

数据绑定和事件绑定

事件绑定:触发DOM上的事件,angular监听到通知,然后执行对应的函数

数据绑定:ng的数据流是自父到子单向流动的,每一个组件都有一个变化ChangeDetector检查器,这些检查器构成一棵树。当用户在触发事件、请求数据后、异步事件等触发数据改变后,angular会从根部往下进行检查,进行数据比对,如果改变了,就讲改变后的值同步到视图上。angular2+引入zonejs来监听所有的异步事件,通知框架进行脏检查。zonejs可以分组多任务来执行检查,同时也应用到angular的Directive指令中,angular默认自动检查,但是有一个OnPush的策略可以配置成免检查,

changeDetection:ChangeDetectionStrategy.OnPush, // 检测策略

然后自己手动通过ChangeDetectorRef来触发改变。

abstract class ChangeDetectorRef {
      abstract markForCheck(): void // 当输入已更改或视图中发生了事件时,组件通常会标记为脏的(需要重新渲染)。调用此方法会确保即使那些触发器没有被触发,也仍然检查该组件。
      abstract detach(): void //从变更检测树中分离开视图。 已分离的视图在重新附加上去之前不会被检查。 与 detectChanges() 结合使用,可以实现局部变更检测。 即使已分离的视图已标记为脏的,它们在重新附加上去之前也不会被检查。
      abstract detectChanges(): void // 检查该视图及其子视图。与 detach 结合使用可以实现局部变更检测。
      abstract checkNoChanges(): void // 检查变更检测器及其子检测器,如果检测到任何更改,则抛出异常。在开发模式下可用来验证正在运行的变更检测器是否引入了其它变更。
      abstract reattach(): void // 把以前分离开的视图重新附加到变更检测树上。 视图会被默认附加到这棵树上。
    }

zonejs将setTimeout,addEventListener、promise等异步事件包裹起来,触发事件、请求数据、异步事件等都在ngZone中执行,这样就可以知道这3类事件被触发,通知angular进行脏检查。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值