promise

什么是Vue的MVVM模式

2018-09-03  本文已影响0人  fangdown

vue中的MVVM模式
即Model-View-ViewModel。

Vue是以数据为驱动的,Vue自身将DOM和数据进行绑定,一旦创建绑定,DOM和数据将保持同步,每当数据发生变化,DOM会跟着变化。

ViewModel是Vue的核心,它是Vue的一个实例。Vue实例时作用域某个HTML元素上的,这个HTML元素可以是body,也可以是某个id所指代的元素。

DOM Listeners和Data Bindings是实现双向绑定的关键,实现的原理是Object.defineProperty中的get和set方法,及消息订阅模式。DOM Listeners监听页面所有View层DOM元素的变化,当发生变化,Model层的数据随之变化;Data Bindings监听Model层的数据,当数据发生变化,View层的DOM元素随之变化。

Object.defineProperty详解
Object.defineProperty(obj, prop, descriptor)
obj: 目标对象 -必填
prop: 要定义的属性或目标方法 -必填
descriptor: 描述,是一个对象,以下详解:
descriptor(value, writable, configurable, enumerable, get , set)
value: 属性的值
writable: 属性的值是否可以更改,默认false
configurable: 总开关,设置为false后不能修改value、writable、configurable
enumerable:能否在for..in 或者Object.keys中循环出来。

在descriptor中不能同时设置(value、writable) 和 (get、set),否者会报错,
就是说想用(get 和 set),就不能用(wriable 或 value中的任何一个)

下面举例说明一下

       var book = {
            _year: 2017,
            edtion: 1
        }
        // get set
        Object.defineProperty(book, 'year', {
            get: function () {
                return this._year; //必须返回
            },
            set: function (newValue) {
                this._year = newValue;
                this.edtion += 1;
                // dosomething
            }
        });
        // writable value
        book.year = 2018;
        console.log(book.edtion); //2
        Object.defineProperty(book,'_year', {
            writable: false,
            value: 2018
        })
        book._year = 2019 //没报错
        console.log(book._year) // 2018,说明值不会改变
上一篇下一篇

猜你喜欢

热点阅读