美文网首页
Vue双向数据绑定原理

Vue双向数据绑定原理

作者: 罂粟1995 | 来源:发表于2018-05-31 12:42 被阅读0次

什么是双向数据绑定?

Vue是个MVVM框架,当数据发生变化时,视图也跟着发生变化,当视图发生变化时,数据也会跟着同步变化。双向数据绑定,一般是对于UI控件来说的,非UI控件不会涉及到双向数据绑定。

Vue双向数据绑定是怎么实现的?

官方文档上说得很简单——用v-model指令在表单元素上创建双向数据绑定。


屏幕快照 2018-05-31 上午7.43.43.png

那么,v-model背后的实现原理又是什么呢?
它的基本原理是利用Object.defineProperty()这个方法重新定义了对象获取属性值(get)和设置属性值(set)的操作来实现的。
使用Object.defineProperty()实现一个简单的双向数据绑定小例子:

<!doctype html>
<html>
    <head>
        <title></title>
    </head>
    <body>
        <input id="text" type="text" />
        <p id="p"></p>
    </body>
    <script type="text/javascript">
        var obj = {};
        Object.defineProperty(obj,"name",{
            get:function(){
                return name;
            },
            set:function(value){
                document.getElementById("text").value = value;
                document.getElementById("p").innerHTML = value;
            }
        });
        var input = document.getElementById("text");
        input.addEventListener("input",function(event){
            var text = event.target.value;
            obj.name = text;
        });
    </script>
</html>

效果:


屏幕快照 2018-05-31 上午10.59.20.png

可以看到,我们在输入框输入内容时,<p>标签内会显示对应的内容,这说明实现了model=>view的绑定。
现在我们在控制台给obj.name赋值,发现赋值后输入框的内容变成了所赋的那个值:


屏幕快照 2018-05-31 上午11.00.57.png

说明实现了view=>model的绑定。

当然vue的实现比这复杂得多,详细请查看网上大牛们的博客。

这种实现双向数据绑定的方法叫作数据劫持结合发布者-订阅者模式。

简单解释什么是数据劫持结合发布者-订阅者模式:
1、数据劫持:在本例中,通过Object.defineProperty来劫持name属性的setter,getter,在数据变化时通知订阅者,触发相应的回调;
2、发布者/订阅者:订阅者可定义为希望接收到通知的对象;发布者可定义为激活事件的对象。在本例中,文本输入框相当于一个订阅者,Obj相当于一个发布者。文本框通过addEventListener接收Obj给它的启动通知,触发相应的函数,进行视图更新。

一般来说,实际应用中会涉及多个订阅者,这时就需要一个消息订阅器来管理这些订阅者;另外还需要指令来初始化订阅者。
详情及更复杂的例子可参考这篇博文:
http://www.cnblogs.com/libin-1/p/6893712.html

相关文章

  • 深入Vue响应式原理

    1.Vue的双向数据绑定 参考 vue的双向绑定原理及实现Vue双向绑定的实现原理Object.definepro...

  • vue 双向数据绑定

    Vue实现数据双向绑定的原理:Object.defineProperty()vue实现数据双向绑定主要是:采用数据...

  • 前端理论面试--VUE

    vue双向绑定的原理(详细链接) VUE实现双向数据绑定的原理就是利用了 Object.definePropert...

  • Vue实现数据双向绑定的原理

    Vue实现数据双向绑定的原理:Object.defineProperty() vue实现数据双向绑定主要是:采用数...

  • 【转】JavaScript的观察者模式(Vue双向绑定原理)

    关于Vue实现数据双向绑定的原理,请点击:Vue实现数据双向绑定的原理原文链接:JavaScript设计模式之观察...

  • vue面试知识点

    vue 数据双向绑定原理 vue实现数据双向绑定原理主要是:采用数据劫持结合发布订阅设计模式的方式,通过对data...

  • Vue双向数据绑定原理

    剖析Vue实现原理 - 如何实现双向绑定mvvm 本文能帮你做什么?1、了解vue的双向数据绑定原理以及核心代码模...

  • 关于双向绑定的问题

    剖析Vue实现原理 - 如何实现双向绑定mvvm 本文能帮你做什么?1、了解vue的双向数据绑定原理以及核心代码模...

  • 前端面试题:VUE

    1. vue的双向数据绑定实现原理? 2. vue如何在组件之间进行传值? 3. vuex和vue的双向数据绑定...

  • vue

    1、vue的双向数据绑定实现原理 2、vue如何在组件之间进行传值 3、vuex和vue的双向数据绑定有什么冲突 ...

网友评论

      本文标题:Vue双向数据绑定原理

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