前端学习指南前端之路饥人谷技术博客

关于Vue的MVVM

2017-08-13  本文已影响3300人  大春春

文章参考
阮一峰:MVC,MVP 和 MVVM 的图示
深入响应式原理

最近工作中一直在使用Vue这一款框架作为开发工具,但是用了之后发现自身对于MVVM的概念并不了解。所以写下这篇博客作为巩固基础知识。

什么是MVVM?

关于Object.defineProperty

        // 没有get和set
        let obj = {

        }
        Object.defineProperty(obj, 'a', {
            value: 123, // 该属性值为123
            enumerable: false, // 不可被遍历得到
            writable: false, // 不可被重新写入
            configurable: false // 不可被删除,且enumerable和value不能通过Object.defineProperty重新定义
        })
        // 使用get和set
        let obj = {
            // 设定默认值
            _data: {
                a: 123
            }
        }
        Object.defineProperty(obj, 'a', {
            get() {
                // 当获取a时执行
                console.log('a被获取了')
                return obj._data.a
            },
            set(value) {
                // 当修改a时执行
                obj._data.a = value
                console.log('a的值被修改了')
            }
        })
        let obj = {

        }
        Object.defineProperty(obj, 'a', {
            value: 123,
            get() {
                // 当获取a时执行
                console.log('a被获取了')
                return obj._data.a
            },
            set(value) {
                // 当修改a时执行
                obj._data.a = value
                console.log('a的值被修改了')
            }
        })

使用Object.defineProperty实现MVVM的表单数据双向绑定

缺点

本身form节点中只有name和age两个输入框对应person中的属性,如果这时候我在form节点中新添加一个输入框进去,这个新添加的input输入的值是没有双向绑定效果的;
PS:在Vue中,created函数后新添加的属性不会进行监听,因为这时候的数据已经初始化完毕,当然Vue本身也提供了一个Vue.set(object, key, value)api使其可以在created后对data对象进行属性的添加;

上一篇下一篇

猜你喜欢

热点阅读