美文网首页
Vue.js双向绑定的实现原理

Vue.js双向绑定的实现原理

作者: Allan要做活神仙 | 来源:发表于2017-04-27 10:54 被阅读63次

    先了解如何实现绑定,见http://www.jianshu.com/p/e9b81fec00b8

    然后要实现


    html
    js

    首先将该任务分成几个子任务:
       1、输入框以及文本节点与 data 中的数据绑定
       2、输入框内容变化时,data 中的数据同步变化。即 view => model 的变化。
       3、data 中的数据变化时,文本节点的内容同步变化。即 model => view 的变化。
    要实现任务一,需要对 DOM 进行编译,这里有一个知识点:DocumentFragment

    DocumentFragment
    DocumentFragment(文档片段)可以看作节点容器,它可以包含多个子节点,当我们将它插入到 DOM 中时,只有它的子节点会插入目标节点,所以把它看作一组节点的容器。使用 DocumentFragment 处理节点,速度和性能远远优于直接操作 DOM。Vue 进行编译时,就是将挂载目标的所有子节点劫持(真的是劫持,通过 append 方法,DOM 中的节点会被自动删除)到 DocumentFragment 中,经过一番处理后,再将 DocumentFragment 整体返回插入挂载目标。

        var dom = nodeToFragment(document.getElementById('app'));
        console.log(dom);
    
        function nodeToFragment(node){
            var flag = document.createDocumentFragment();
            var child;
            while (child = node.firstChild){    // 给child赋值,然后判断child是否为真
                flag.append(child);             // 劫持node的所有子节点
            }
            return flag;
        }
    
        document.getElementById('app').appendChild(dom);
    
    1

    相关文章

      网友评论

          本文标题:Vue.js双向绑定的实现原理

          本文链接:https://www.haomeiwen.com/subject/ptygzttx.html