当前位置:首页 > VUE

vue怎样实现mvvm

2026-01-08 05:11:45VUE

Vue 实现 MVVM 的原理

Vue 的 MVVM(Model-View-ViewModel)模式通过数据绑定和响应式系统实现视图与数据的自动同步。以下是 Vue 实现 MVVM 的核心机制:

数据劫持(响应式系统)

Vue 使用 Object.defineProperty(Vue 2)或 Proxy(Vue 3)劫持数据的读写操作。当数据变化时,触发依赖的视图更新。

// Vue 2 的数据劫持示例
const data = { name: 'Vue' };
Object.defineProperty(data, 'name', {
  get() {
    console.log('读取数据');
    return value;
  },
  set(newVal) {
    console.log('更新数据');
    value = newVal;
    updateView(); // 触发视图更新
  }
});

依赖收集

通过 Dep(依赖管理器)和 Watcher(观察者)实现依赖跟踪。每个响应式属性有一个 Dep 实例,当属性被访问时,当前 Watcher 会被记录到 Dep 中。

class Dep {
  constructor() {
    this.subscribers = [];
  }
  depend() {
    if (target && !this.subscribers.includes(target)) {
      this.subscribers.push(target);
    }
  }
  notify() {
    this.subscribers.forEach(sub => sub());
  }
}

模板编译

Vue 将模板编译为渲染函数,解析指令(如 v-model)和插值表达式({{}}),建立数据与 DOM 的绑定关系。

// 示例:v-model 双向绑定实现
<input v-model="message">
// 编译后等效于
<input :value="message" @input="message = $event.target.value">

虚拟 DOM

通过虚拟 DOM 比对(Diff 算法)最小化真实 DOM 操作。数据变化时生成新的虚拟 DOM,与旧节点对比后局部更新视图。

vue怎样实现mvvm

// 简化的虚拟 DOM 结构
const vnode = {
  tag: 'div',
  props: { id: 'app' },
  children: [
    { tag: 'span', text: this.message }
  ]
};

MVVM 各层职责

  • Model:普通 JavaScript 对象,如 Vue 的 data
  • View:模板或渲染函数生成的 DOM。
  • ViewModel:Vue 实例,负责数据绑定、事件监听等桥梁作用。

通过以上机制,Vue 实现了数据变化自动驱动视图更新(数据绑定),以及视图交互反向修改数据(双向绑定)的 MVVM 模式。

标签: vuemvvm
分享给朋友:

相关文章

vue如何实现到期提醒

vue如何实现到期提醒

实现 Vue 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed: {…

vue怎么实现数据检测

vue怎么实现数据检测

Vue 数据检测的实现方式 Vue 通过响应式系统实现数据检测,核心机制基于 Object.defineProperty(Vue 2)或 Proxy(Vue 3)。以下是具体实现方法: 基于 Vue…

vue里实现增删改查

vue里实现增删改查

在Vue中实现增删改查 数据初始化 在Vue组件的data中定义初始数据和表单绑定的变量: data() { return { items: [ { id: 1, name:…

vue实现密码框的包

vue实现密码框的包

Vue 密码框实现方案 在 Vue 中实现密码框功能,可以通过原生 HTML 结合 Vue 指令或使用第三方组件库完成。以下是几种常见方案: 原生 HTML + Vue 双向绑定 <templ…

jquery实现vue

jquery实现vue

jQuery 和 Vue.js 是两种不同理念的前端工具,jQuery 以 DOM 操作和事件驱动为核心,而 Vue.js 是数据驱动的现代化框架。如果想用 jQuery 实现类似 Vue 的功能(如…

vue实现看板

vue实现看板

Vue 实现看板功能 使用 Vue 实现看板功能可以通过组件化开发、状态管理和拖拽库结合完成。以下是一个完整的实现方案: 基础项目结构 src/ ├── components/ │ ├── Ka…