zoukankan      html  css  js  c++  java
  • MVVM 响应式原理(Vue)

    本文地址: https://www.cnblogs.com/veinyin/p/12640058.html

    1 双向绑定含义

    双向绑定简单来说就是数据可以驱动视图,视图也可以影响数据。

    视图修改数据无非就是通过监听可输入元素的变化,动态修改 viewmodal

    2 实现数据绑定方式

    常用的有三种方式

    • 发布者-订阅者模式(backbone)

    • 脏值检查(angular)

    • 数据劫持(vue)

    2.1 发布者-订阅者模式

    sub、pub 方式实现数据和试图的绑定监听,vm.set(property, value) 方式更新数据

    2.2 脏值检查

    最简单实现方式定时器轮询是否发生变化

    在指定事件触发时,检测新旧值是否相同,如果不同则更新

    触发事件比如

    • 用户交互 - 用户填写表单、点击按钮等

    • XHR响应 - http 请求

    • 浏览器 location 变化 - 路由跳转

    • timer - 定时器

    2.3 数据劫持

    通过 Object.defineProperty() 劫持各属性的 settergetter,发生变化时发布消息给订阅者,触发回调

    3 vue 实现原理

    Vue 采用数据劫持结合发布者-订阅者模式的方式通过 Object.defineProperty() 劫持并监听各个属性的 setter 和 getter,在数据变动时,发布消息给依赖收集器,通知观察者,调用相应的回调函数,进而更新视图

    3.1 实现逻辑

    MVVM 作为入口函数,整合 Observer、Compile、Watcher 三者,通过 Observer 监听数据变化,通过 Compile 解析编译模版指令,通过 Watcher 连接 Observer 和 Compile ,达到数据更新时视图更新,视图交互更新时数据更新的双向绑定效果

     

    订阅器(dep):通知订阅者更新视图,存放多个订阅器

    订阅者(watcher):更新视图

    observer:劫持属性

    compile:解析指令

    3.2 代码实现

    完成基础逻辑实现,仓库地址:

    https://github.com/yinyuhui/mvvm

     

     

  • 相关阅读:
    vue 输入框数字、中文验证
    微信小程序 画布arc截取圆形图片
    change事件同一文件多次选中
    form表单提交
    微信小程序 拖动图片一边进行截取
    初步了解XMLHttpRequest对象、http请求的封装
    encodeURI和uncodeURIComponent的介绍
    vue-cli 3.0安装和使用
    MySQL学习中,遇到的问题记录
    react学习之redux和redux-react用法
  • 原文地址:https://www.cnblogs.com/veinyin/p/12640058.html
Copyright © 2011-2022 走看看