Skip to content

数据驱动

准备工作

  • 数据驱动
  • 响应式的核心原理
  • 发布订阅模式和观察者模式

数据驱动

  • 数据响应式、双向绑定、数据驱动
  • 数据响应式
    • 数据模型仅仅是普通的JavaScript对象,而当我们修改数据时,视图会进行更新,避免了繁琐的DOM操作,提高开发效率
  • 双向绑定
    • 数据改变,视图改变;视图改变,数据也随之改变
    • 使用v-model在表单元素上创建双向数据绑定
  • 数据驱动是Vue最独特的特性之一
    • 开发过程中仅需要关注数据本身,不需要关心数据是如何渲染到视图

vue2 Object.DefinePro

vue3 Proxy

发布订阅模式 观察者模式

js
let eventHub = new Vue()

// 发布
eventHub.$emit('eventName',)
//订阅
eventHub.$on('eventName', () => {})
let eventHub = new Vue()

// 发布
eventHub.$emit('eventName',)
//订阅
eventHub.$on('eventName', () => {})

观察者模式

  • 观察者模式(订阅者) --Watch
    • update(): 当时间发生时,,具体要做的事情
  • 目标(发布者) --Dep
    • subs数组:存储所有的观察者
    • addSub(): 添加观察者
    • notify(): 当事件发生,调用所有观察者的update()方法
  • 没有事件中心
js
class Vue {
    constructor ( options ) {
        //1.通过属性保存选项的数据
        this.$options = options || {}
        this.$data = options.data || {}
        this.$el = typeof options.el === 'string' ? document.querySelector
        //2.把data中的成员转换成getter和setter,注入到vue实例中

        //3.调用observer对象,监听数据的变化

        //4.调用compiler对象,解析指令和差值表达式

    }
}
class Vue {
    constructor ( options ) {
        //1.通过属性保存选项的数据
        this.$options = options || {}
        this.$data = options.data || {}
        this.$el = typeof options.el === 'string' ? document.querySelector
        //2.把data中的成员转换成getter和setter,注入到vue实例中

        //3.调用observer对象,监听数据的变化

        //4.调用compiler对象,解析指令和差值表达式

    }
}