当前位置: 首页 > news >正文

Vue-MVVM 模型

一、什么是 MVVM?

MVVM 是一种软件架构设计模式,全称为 Model-View-ViewModel,它将应用程序分为三个核心部分:

层级说明
Model数据模型,代表应用的数据和业务逻辑(如用户信息、订单数据等)
View视图层,用户看到的 UI 界面(DOM 结构)
ViewModel视图与模型之间的“桥梁”,负责监听 Model 的变化并更新 View,同时也监听 View 的交互并更新 Model

✅ MVVM 的核心思想:

数据驱动视图,视图变化自动同步数据。

这与传统的“操作 DOM 更新数据”完全不同,MVVM 让开发者专注于数据本身,而无需手动操作 DOM。

二、MVVM 与其他模式对比

模式特点代表框架
MVC控制器(Controller)处理逻辑,更新视图早期 Angular、Backbone
MVPPresenter 作为中间层,主动更新 ViewAndroid 开发常用
MVVMViewModel 双向绑定 View 和 Model,自动同步Vue、Angular、WPF

🔍 Vue 是典型的 MVVM 框架,虽然官方并未严格定义自己为 MVVM,但其设计思想与 MVVM 高度契合。

三、Vue 中的 MVVM 实现原理

我们以一个简单的 Vue 示例来解析 MVVM 的运作流程:

<div id="app"><input v-model="message" placeholder="输入内容"><p>{{ message }}</p>
</div><script src="https://unpkg.com/vue@3"></script>
<script>const app = Vue.createApp({data() {return {message: 'Hello Vue!'}}}).mount('#app')
</script>

🧩 各部分对应 MVVM 角色:

Vue 元素对应 MVVM 层级
data() 返回的对象Model
<input> 和 <p> 标签View
Vue 实例(app)ViewModel

🔁 数据流解析:

  1. 初始化:Vue 实例创建时,data 中的数据被劫持(通过 Proxy 或 Object.defineProperty),变成响应式。
  2. 视图渲染:模板中的 {{ message }} 和 v-model 被编译成渲染函数,首次渲染页面。
  3. 数据变化 → 视图更新:当 message 改变时,Vue 自动通知视图重新渲染。
  4. 视图交互 → 数据更新:用户在输入框输入内容,v-model 监听到 input 事件,自动更新 message

这就是 双向绑定 的体现!

四、核心机制:响应式系统

Vue 的 MVVM 能够“自动同步”,依赖于其强大的 响应式系统

Vue 2 vs Vue 3 实现方式:

版本响应式原理局限性
Vue 2Object.defineProperty无法监听对象新增/删除属性
Vue 3Proxy + Reflect更强大,可监听整个对象、数组、动态属性

简化版响应式原理代码(Vue 3 风格):

function reactive(obj) {return new Proxy(obj, {get(target, key, receiver) {console.log(`获取 ${key}:`, target[key])return Reflect.get(target, key, receiver)},set(target, key, value, receiver) {console.log(`设置 ${key} = ${value}`)const result = Reflect.set(target, key, value, receiver)// 这里可以触发视图更新(notify)updateView()return result}})
}function updateView() {console.log('🔄 视图更新...')
}// 使用
const state = reactive({ message: 'Hello' })
state.message = 'World'  // 自动触发视图更新

💡 实际 Vue 源码中,通过 effecttracktrigger 实现依赖收集和派发更新,更加复杂高效。

五、双向绑定的实现:v-model

v-model 是 Vue 中实现双向绑定的语法糖。

等价转换:

<!-- 使用 v-model -->
<input v-model="message"><!-- 等价于 -->
<input :value="message" @input="message = $event.target.value"
>

MVVM 中的角色:

  • View → Model@input 事件更新 message
  • Model → View:value 绑定将数据渲染到输入框

这就是典型的 ViewModel 双向桥接

六、MVVM 的优势与局限

✅ 优势:

  1. 开发效率高:无需手动操作 DOM,专注数据逻辑。
  2. 维护性强:数据与视图分离,结构清晰。
  3. 自动更新:响应式系统保证数据与视图一致性。
  4. 组件化友好:每个组件都可以看作一个小型 MVVM。

❌ 局限性:

  1. 学习成本:响应式原理、依赖追踪等概念较抽象。
  2. 性能开销:响应式劫持对大型对象有一定性能影响。
  3. 调试困难:数据变化链路较长,不易追踪。

七、MVVM 在 Vue 3 中的演进

Vue 3 进一步优化了 MVVM 的实现:

  • Composition API:通过 refreactivewatch 等函数,更灵活地组织 ViewModel 逻辑。
  • 更好的 TypeScript 支持:类型推断更准确,提升开发体验。
  • Tree-shaking:按需引入,减少打包体积。
import { ref, watch } from 'vue'export default {setup() {const message = ref('Hello')watch(message, (newVal) => {console.log('message changed:', newVal)})return { message }}
}

🔥 setup() 函数本质上就是 ViewModel 的“逻辑容器”。

八、总结

概念说明
MVVMModel-View-ViewModel,Vue 的核心设计模式
Model数据源,由 data 或 ref/reactive 定义
View模板或 JSX,描述 UI 结构
ViewModelVue 实例,负责数据与视图的双向同步
响应式通过 Proxy 实现数据劫持,自动更新视图
v-model双向绑定语法糖,简化表单处理

九、结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!

http://www.dtcms.com/a/474516.html

相关文章:

  • 网站需要什么费用高端品牌网站有哪些
  • Emacs折腾日记(三十二)——org mode的基本美化
  • 从数据混沌到智能驱动:非结构化数据中台的技术实践与方法论指南
  • 什么是自相关分析(ACF)?
  • Web前端开发,新手入门指南
  • 织梦增加网站英文名称百度商桥怎么和网站
  • Paper2Agent:将科研论文转化为可交互的AI智能体工具项目
  • 静态网页 vs 动态网页:爬虫该如何选择抓取策略?
  • AI/CICD/Next/React NativeTaro内容
  • godot 通过 GDExtension 配置 C++ 开发环境
  • XMLHttpRequest对象
  • 广州市外贸网站建设内容管理系统开发
  • 带你了解STM32:SPI通信(软件部分)
  • 标量子查询优化(二)
  • 网站建设的客户都在哪里Wordpress西联
  • ppo dino 多余尺寸删除ai 思路2 绕过cad软件
  • 【LeetCode】66. 加一
  • 日志1--时间戳类型设计
  • 手机网站 qq代码免费app制作工具
  • MyBatis-Plus 全方位使用指南:从基础 CRUD 到复杂查询
  • avalonia的hello示例及mvvm实现
  • 天津网站建设优化如何建网站费用多少
  • 网站建设泉州效率网络企业网站建设基本原则
  • 41.Shell Case选择 While循环
  • 基于单片机的智能水箱温度液位控制系统设计
  • 数字化转型—AI+制造业的十大应用场景
  • Java-集合练习
  • 新民正规网站建设价格咨询广州app开发价格表
  • 适合用struts2做的网站钦州教育论坛网站建设
  • 关于节约化建设网站的表态发言企业推广方式力荐隐迅推