用过angularjs的人肯定知道他的双向绑定,用起来也是很方便,可是他内部是怎么实现的呢?
视图变化了去更新数据,这个还好理解,也大都知道怎么去模拟一下,但是说到数据变化了去更新视图,关键在于是怎么去判断数据发生了变化。。。
之前想了一下,类似先存储一份oldValue,然后定时去遍历这些,用newValue和oldValue去对比,如果变化了做更新和其他相关的工作。。。
但是觉得这样行吗?自己思索半天觉得也不是很靠谱,希望各位兄弟姐妹不吝教诲!## 标题
但是觉得这样行吗?自己思索半天觉得也不是很靠谱,希望各位兄弟姐妹不吝教诲!## 标题
首先声明一点,我对于题主提到的angularjs不太熟悉,有点不对题。
knockout也有同样的数据数据双向绑定的特性,它是以观察者模式进行实现的,创建被观察的对象后,使用set方法赋值的时候,同时通知对该对象感兴趣的观察者,以此来达到数据双向绑定的效果。
实现一个类似双向绑定的简单例子
HTML
SCRIPT
视图变化更新数据
这个很简单,编译指令myModel的时候绑定事件即可
数据变化更新UI
scope内部有个watchers和digest
当我们给scope赋值的时候在触发digest,那么UI就会同步更新了
直接使用setTimeout,结果UI就是不更新,需要我们做如下处理
或者使用angular的$timeout,它帮我们触发了digest