当前位置:首页 > VUE

vue如何实现mvvm

2026-02-10 18:58:43VUE

Vue 的 MVVM 实现原理

Vue 通过数据绑定和响应式系统实现 MVVM(Model-View-ViewModel)模式。核心机制包括数据劫持、依赖收集和派发更新。

数据劫持

Vue 使用 Object.defineProperty(Vue 2)或 Proxy(Vue 3)劫持数据对象的属性访问和修改。当数据变化时,触发 setter 通知依赖更新。

vue如何实现mvvm

// Vue 2 的数据劫持示例
const data = { msg: 'Hello' };
Object.defineProperty(data, 'msg', {
  get() { return value; },
  set(newVal) {
    value = newVal;
    notifyUpdate(); // 触发更新
  }
});

依赖收集

每个组件实例对应一个 Watcher 实例。在渲染过程中,访问数据属性会触发 getter,将当前 Watcher 添加到依赖列表(Dep)中。

vue如何实现mvvm

class Dep {
  constructor() {
    this.subs = []; // 存储 Watcher
  }
  depend() {
    if (Watcher.target) {
      this.subs.push(Watcher.target);
    }
  }
  notify() {
    this.subs.forEach(watcher => watcher.update());
  }
}

虚拟 DOM 与更新

Vue 将模板编译为渲染函数,生成虚拟 DOM。数据变化时,Watcher 触发重新渲染,通过 Diff 算法比对新旧虚拟 DOM,高效更新真实 DOM。

// 简化的渲染流程
function updateComponent() {
  const vnode = render(); // 生成虚拟 DOM
  patch(oldVnode, vnode); // 差异更新
}

关键模块分工

  • Model:普通 JavaScript 对象,存储业务数据。
  • View:模板或渲染函数,声明式描述 UI。
  • ViewModel:Vue 实例,桥接 Model 和 View,处理数据绑定和交互逻辑。

双向绑定示例

通过 v-model 指令实现表单输入与数据的双向绑定:

<input v-model="message">
<p>{{ message }}</p>
new Vue({
  data: { message: '' } // 数据变化自动更新视图,输入修改自动同步数据
});

与传统 MVC 的区别

  • MVC:手动操作 DOM,需直接监听事件并更新视图。
  • MVVM:数据驱动视图,开发者只需关注数据状态,框架自动处理 DOM 更新。

Vue 的 MVVM 实现通过响应式系统和虚拟 DOM 技术,降低了直接操作 DOM 的复杂度,提升了开发效率。

标签: 如何实现vue
分享给朋友:

相关文章

vue优秀实现

vue优秀实现

Vue.js 优秀实现方法 响应式数据管理 使用 Vue 的 ref 和 reactive 处理基础类型和对象类型数据,结合 computed 计算属性优化渲染性能。对于复杂状态,推荐 Pinia 替…

vue实现缩放

vue实现缩放

Vue 实现缩放的方法 在 Vue 中实现缩放功能可以通过多种方式完成,以下是一些常见的方法: 使用 CSS transform 属性 通过 CSS 的 transform: scale() 属性可…

vue实现批量

vue实现批量

Vue 实现批量操作的方法 在 Vue 中实现批量操作通常涉及选择多个项目并执行统一处理,例如批量删除、批量更新等。以下是几种常见实现方式: 表格多选批量操作 使用 el-table 配合复选框实现…

vue实现switch

vue实现switch

Vue 实现 Switch 开关组件 在 Vue 中实现 Switch 开关组件可以通过自定义组件或使用现有 UI 库完成。以下是几种常见实现方式: 自定义 Switch 组件 创建一个基础 Sw…

vue实现vnc

vue实现vnc

Vue 实现 VNC 客户端 在 Vue 项目中实现 VNC 客户端功能,可以通过集成现有的 VNC 客户端库或组件完成。以下是具体实现方法: 安装依赖库 使用 noVNC 或其他 VNC 客户端…

vue多选实现

vue多选实现

Vue 多选实现方法 基础实现(v-model + multiple) 在 Vue 中实现多选可以通过 <select> 元素的 multiple 属性结合 v-model 完成。v-mo…