前端知识框架 前端知识框架
首页
基础
框架
插件
Node
地图
更多
前端须知
  • 分类
  • 标签
  • 归档

BestIdea

首页
基础
框架
插件
Node
地图
更多
前端须知
  • 分类
  • 标签
  • 归档
  • SVG图标组件
  • vue性能
  • vue中使用less全局变量
  • 路由懒加载
  • 生命周期
  • 双向绑定原理
  • 微信网页开发
  • 微信小程序开发(uni-app)
  • 微信小程序开发
  • 微信小程序入门
  • 0与3.0项目对比
  • 预渲染
  • 组件通信方式
  • Vue3.x组合式编程
  • 从零搭建 vite+vue3+ts+pinia 框架
  • Vue-iClient3D-WebGL入门文档
  • Vite常用配置
  • 框架
Btzh
2022-03-26

双向绑定原理

# 双向绑定的原理

MVVM 的核心功能就是双向绑定

数据层(Model):应用的数据及业务逻辑

视图层(View):应用的展示效果,各类UI组件

业务逻辑层(ViewModel):框架封装的核心,它负责将数据与视图关联起来

采用数据劫持结合发布订阅的模式,通过 Object.defineProperty() 对数据绑定 getter setter 方法,

当数据发生变化发布给订阅者 触发相应监听回调 更新视图。

# 流程

  • new Vue 时候 调用 new Observer(data)

  • new Observer(data) 里面 对每个属性使用 defineProperty

  • defineProperty 的 get() 里面进行订阅收集 watcher

  • defineProperty 的 set() 里面进行发布依次执行 收集的 watcher(推入到nextTick执行)

<input id="input"/>
<div id="div"></div>
// js实现简单的双向绑定
const obj = {};
const input = document.getElementById('input');
const div = document.getElementById('div');
Object.defineProperty(obj, 'name', {
  get () {
    return obj.name;
  },
  set (newValue) {
    input.value = newValue;
    div.innerHTML = newValue;
  }
})
input.addEventListener('keyup', (event) => {
  obj.name = event.target.value;
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
上次更新: 2022/05/05, 17:47:41
生命周期
微信网页开发

← 生命周期 微信网页开发→

最近更新
01
webpack打包替换类名命名空间
05-01
02
Vite常用配置
02-26
03
crypto前端加密
01-18
更多文章>
Theme by Vdoing | Copyright © 2022-2024
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式