当前位置:首页 > VUE

vue mvvm 实现

2026-02-10 09:30:35VUE

Vue MVVM 实现原理

Vue 的 MVVM(Model-View-ViewModel)实现主要依赖于数据绑定和响应式系统。以下是其核心实现机制:

数据劫持(响应式核心)

Vue 使用 Object.defineProperty(Vue 2.x)或 Proxy(Vue 3.x)对数据进行劫持,监听数据变化。当数据被访问或修改时,触发对应的 getter 和 setter。

// Vue 2.x 的响应式实现简化示例
function defineReactive(obj, key, val) {
  Object.defineProperty(obj, key, {
    get() {
      console.log('访问数据');
      return val;
    },
    set(newVal) {
      console.log('更新数据');
      val = newVal;
      // 触发视图更新
    }
  });
}

依赖收集(Dep 和 Watcher)

Vue 通过 Dep(依赖管理器)和 Watcher(观察者)实现依赖收集和派发更新。

vue mvvm 实现

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

class Watcher {
  update() {
    // 更新视图
  }
}

模板编译

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

// 简化的模板编译示例
function compile(template) {
  // 解析模板生成 AST
  // 将 AST 转换为渲染函数
  return function render() {
    // 返回虚拟 DOM
  };
}

虚拟 DOM 和 Diff 算法

Vue 通过虚拟 DOM 实现高效的视图更新,使用 Diff 算法比较新旧虚拟 DOM 的差异,最小化 DOM 操作。

vue mvvm 实现

// 简化的 Diff 示例
function patch(oldVnode, newVnode) {
  // 比较并更新 DOM
}

双向绑定实现(v-model)

v-model 是语法糖,本质上是 v-bindv-on 的组合。

// v-model 的等价形式
<input v-model="message">
// 等价于
<input :value="message" @input="message = $event.target.value">

生命周期管理

Vue 组件生命周期钩子(如 createdmounted)在特定阶段被调用,允许开发者介入组件的创建、更新和销毁过程。

new Vue({
  created() {
    // 实例创建后调用
  },
  mounted() {
    // DOM 挂载后调用
  }
});

总结

Vue 的 MVVM 实现通过数据劫持、依赖收集、模板编译和虚拟 DOM 等技术,实现了数据与视图的自动同步。ViewModel 作为中间层,负责处理 Model 和 View 之间的交互,开发者只需关注数据逻辑,无需手动操作 DOM。

标签: vuemvvm
分享给朋友:

相关文章

vue实现多级组件

vue实现多级组件

实现多级组件的基本结构 在Vue中实现多级组件通常涉及父子组件嵌套,通过props向下传递数据,通过$emit向上传递事件。多级组件的核心是递归或动态组件渲染。 <!-- 父组件 Paren…

vue实现sql操作

vue实现sql操作

在Vue中实现SQL操作通常需要结合后端服务或本地数据库技术,因为前端JavaScript无法直接连接SQL数据库。以下是几种常见的实现方式: 通过API与后端交互 Vue前端通过HTTP请求(如…

vue实现字母添加排序

vue实现字母添加排序

实现字母添加排序的方法 在Vue中实现字母添加排序功能,可以通过以下步骤完成: 创建Vue实例并定义数据 new Vue({ el: '#app', data: { letters…

vue实现a4打印模板

vue实现a4打印模板

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

vue实现边框

vue实现边框

Vue 实现边框的方法 在 Vue 中实现边框效果可以通过多种方式完成,包括内联样式、CSS 类绑定、动态样式以及使用第三方 UI 库。以下是几种常见的实现方法。 内联样式绑定 使用 Vue 的 :…

vue实现星星

vue实现星星

实现星星评分的Vue组件 使用Vue实现星星评分功能可以通过组件化方式完成,以下是一个完整的实现方案: 模板部分 <template> <div class="star-ra…