美文网首页
vue的双向绑定分享(一)

vue的双向绑定分享(一)

作者: 雨过天晴sky | 来源:发表于2019-03-05 22:12 被阅读0次

    vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的,那么vue是如果进行数据劫持的,我们可以先来看一下通过控制台输出一个定义在vue初始化数据上的对象是个什么东西。

    代码部分:

    var vm = new Vue({

        data: {

            obj: {

                a: 1

            }

        },

        created: function () {

            console.log(this.obj);

        }

    });


    输出结果:

    vue的双向绑定分享(一)

    我们可以看到属性a有两个相对应的get和set方法,为什么会多出这两个方法呢?因为vue是通过Object.defineProperty()来实现数据劫持的。

    Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。

    语法:Object.defineProperty(obj, prop, descriptor)

    obj:要在其上定义属性的对象。

    prop:要定义或修改的属性的名称。

    descriptor:将被定义或修改的属性描述符。

    get:一个给属性提供 getter 的方法,如果没有 getter 则为 undefined。当访问该属性时,该方法会被执行,方法执行时没有参数传入,但是会传入this对象(由于继承关系,这里的this并不一定是定义该属性的对象)。

    默认为 undefined。

    set:一个给属性提供 setter 的方法,如果没有 setter 则为 undefined。当属性值修改时,触发执行该方法。该方法将接受唯一参数,即该属性新的参数值。

    默认为 undefined。

    Object.defineProperty( )是用来做什么的?它可以来控制一个对象属性的一些特有操作,比如读写权、是否可以枚举,这里我们主要先来研究下它对应的两个描述属性get和set,如果还不熟悉其用法,了解更多请点击

    实现mvvm主要包含两个方面,数据变化更新视图,视图变化更新数据:

    vue的双向绑定分享(一)

    关键点在于data如何更新view,因为view更新data其实可以通过事件监听即可,比如input标签监听 'input' 事件就可以实现了。所以我们着重来分析下,当数据改变,如何更新视图的。

    数据更新视图的重点是如何知道数据变了,只要知道数据变了,那么接下去的事都好处理。如何知道数据变了,其实上文我们已经给出答案了,就是通过Object.defineProperty( )对属性设置一个set函数,当数据改变了就会来触发这个函数,所以我们只要将一些需要更新的方法放在这里面就可以实现data更新view了。

    vue的双向绑定分享(一)

    接下来的是实现过程,放个传送门有兴趣的可以看一下哦传送门

    一起加油!!!

    相关文章

      网友评论

          本文标题:vue的双向绑定分享(一)

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