当前位置:首页 > VUE

vue 如何实现mvvm的

2026-01-23 14:41:28VUE

Vue 的 MVVM 实现原理

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

数据劫持(响应式系统)

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

vue 如何实现mvvm的

// Vue 2 的响应式实现简化示例
function defineReactive(obj, key, val) {
  Object.defineProperty(obj, key, {
    get() {
      console.log('获取值');
      return val;
    },
    set(newVal) {
      if (newVal !== val) {
        console.log('设置值');
        val = newVal;
        // 触发更新
      }
    }
  });
}

依赖收集与发布订阅

通过 Dep(依赖管理器)和 Watcher(观察者)实现依赖的收集和通知。每个响应式属性有一个 Dep 实例,用于存储依赖它的 Watcher

class Dep {
  constructor() {
    this.subs = [];
  }
  addSub(sub) {
    this.subs.push(sub);
  }
  notify() {
    this.subs.forEach(sub => sub.update());
  }
}

虚拟 DOM 与 Diff 算法

Vue 将模板编译为虚拟 DOM(VNode),通过 Diff 算法比对变化,最小化 DOM 操作。当数据变化时,生成新的 VNode 并与旧 VNode 对比,高效更新真实 DOM。

vue 如何实现mvvm的

// 虚拟 DOM 简化结构
const vnode = {
  tag: 'div',
  props: { class: 'container' },
  children: [
    { tag: 'p', text: 'Hello Vue' }
  ]
};

模板编译

Vue 的模板通过编译器转换为渲染函数。例如以下模板:

<div>{{ message }}</div>

会被编译为类似以下的渲染函数:

function render() {
  return _c('div', [_v(_s(message))]);
}

实现流程

  1. 初始化阶段:通过 new Vue() 创建实例,初始化数据、方法、生命周期等。
  2. 模板编译:将模板转换为渲染函数(如果是运行时编译版本)。
  3. 响应式处理:对 data 中的属性进行劫持,建立 DepWatcher 的关联。
  4. 首次渲染:执行渲染函数生成 VNode,并挂载为真实 DOM。
  5. 更新阶段:数据变化时触发 setter,通知 Watcher 重新渲染,通过 Diff 算法更新 DOM。

通过以上机制,Vue 实现了数据驱动视图的 MVVM 模式,开发者只需关注数据逻辑,无需手动操作 DOM。

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

相关文章

vue 实现在线预览

vue 实现在线预览

Vue 实现在线预览的常见方法 使用 iframe 嵌入 通过 iframe 标签可以嵌入多种类型的文件,如 PDF、图片、网页等。需要确保文件地址可访问。 <template> &…

vue实现a4打印模板

vue实现a4打印模板

使用Vue实现A4打印模板 在Vue中实现A4打印模板需要结合CSS的打印样式和Vue的模板渲染能力。以下是具体实现方法: 设置A4纸张尺寸 在CSS中定义A4纸张的标准尺寸(210mm × 297…

vue  select实现

vue select实现

Vue Select 实现方法 在 Vue 中实现下拉选择功能可以使用原生 <select> 标签或第三方库如 vue-select。以下是两种方法的详细说明: 原生 HTML Sele…

vue树形实现

vue树形实现

Vue 树形组件实现方法 使用递归组件实现树形结构 递归组件是 Vue 中实现树形结构的常见方法。通过组件调用自身的方式,可以轻松构建多层嵌套的树形结构。 <template> &l…

简单实现vue

简单实现vue

Vue 的基本实现 创建一个简单的 Vue 应用需要引入 Vue 库,并编写基本的模板和数据绑定逻辑。 <!DOCTYPE html> <html lang="en"> &l…

vue怎么实现

vue怎么实现

Vue 实现方法 Vue 是一个流行的前端框架,用于构建用户界面。以下是几种常见的实现方法: 数据绑定 使用 v-model 指令实现双向数据绑定,适用于表单输入元素。 <input v-m…