angular的实现
avalon的实现
从调用来看,angular由于不能直接使用setTimeout,需要hack一下,并且它并不够智能,需要你$digest。说明它本身没有对子对象的监控,只有用户手动$digest,它才匆匆忙忙把自己修改一遍,然后通知视图更新。
avalon则是一开始就把用户传来的东西改造一遍,它身上每一个毛孔(除非你将它设置为不可监控的)都转为监控属性,计算属性与监控数组,当数据发生改动时就立即调用视图刷新属性。对于这种深层套嵌的对象,如果是中间的对象发生变化,这准确来说被替换了,这个新的子对象也立即被改造,并且涉及它的那个元素会重新打回原形,重新被扫描,被绑定。