news 2026/4/6 12:09:30

【Vue】07 Vue技术——Vue 中的 MVVM 模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Vue】07 Vue技术——Vue 中的 MVVM 模型

前言

在现代前端开发中,MVVM(Model-View-ViewModel)架构模式已成为构建数据驱动应用的核心思想。Vue.js 正是基于这一理念设计的渐进式 JavaScript 框架。本文将通过一个完整的示例,结合代码、控制台输出与可视化图解,深入剖析 MVVM 模型的三大核心组件:M(Model)、V(View)、VM(ViewModel),并揭示它们之间的运行机制。

官网文档:https://cn.vuejs.org/guide/essentials/forms.html


一、什么是 MVVM 模型?

MVVM 是一种软件架构模式,旨在实现视图与数据的解耦,让开发者可以专注于业务逻辑而无需手动操作 DOM。其结构如下:

组件含义
M (Model)数据层,对应data中的数据对象
V (View)视图层,即 HTML 模板代码
VM (ViewModel)核心桥梁,由 Vue 实例创建,负责连接 Model 和 View

💡 简单来说:

  • Model → ViewModel:数据变化触发视图更新
  • View → ViewModel:用户交互事件被监听并处理
  • ViewModel:自动同步数据与界面,实现双向绑定

DOM(Document Object Model,文档对象模型) 是一种用于表示和操作 HTML 或 XML 文档的编程接口(API)。它将整个网页文档抽象为一个树形结构的对象模型,使得开发者可以通过 JavaScript 等脚本语言动态地访问、修改、添加或删除页面内容、结构和样式。


二、实战示例解析

我们来看一段基础的 Vue 代码,逐步分析 MVVM 的工作流程。

<!DOCTYPEhtml><html><head><metacharset="UTF-8"/><title>MVVM模型</title><!-- 引入Vue --><scripttype="text/javascript"src="../js/vue.js"></script></head><body><!-- 准备好一个容器 --><divid="root"><h1>学校名称:{{name}}</h1><h1>学校地址:{{address}}</h1><h1>测试一下1:{{1 + 1}}</h1><h1>测试一下2:{{abc}}</h1><h1>测试一下3:{{$options}}</h1><h1>测试一下3:{{$emit}}</h1><h1>测试一下3:{{_c}}</h1></div><scripttype="text/javascript">// 关闭生产环境提示Vue.config.productionTip=false;constvm=newVue({el:'#root',data:{name:'上高山',address:'长沙',abc:'123'}});console.log(vm);</script></body></html>

✅ 运行结果展示

打开浏览器后,页面显示如下内容:

学校名称:上高山 学校地址:长沙 测试一下1:2 测试一下2:123 测试一下3:{"components":{}, "directives":{}, ...} 测试一下3:function(event){...} 测试一下3:function(a,b,c,d){return createElement$1(...)}


三、MVVM 核心机制详解

1.Model(模型)—— data 中的数据

在 Vue 实例中,data对象就是Model 层。它包含了所有需要在视图中展示或使用的数据。

data:{name:'上高山',address:'长沙',abc:'123'}

这些数据会被 Vue 自动响应式化,任何修改都会通知视图进行更新。


2.View(视图)—— 模板代码

HTML 中使用{{ }}插值语法的部分就是View 层,它是用户看到的界面。

<h1>学校名称:{{name}}</h1><h1>学校地址:{{address}}</h1>

Vue 会将nameaddress的值从data中读取,并插入到对应的<h1>元素中。


3.ViewModel(视图模型)—— Vue 实例对象

const vm = new Vue({...})创建的实例就是ViewModel,它是整个 MVVM 的“大脑”。

🔍 重要发现:
  • data中的所有属性,最终都出现在了vm上;
  • vm身上的所有属性,以及 Vue 原型上的方法,在模板中都可以直接使用。

例如:

{{ $options }}<!-- 输出 options 配置 -->{{ $emit }}<!-- 输出 emit 方法 -->{{ _c }}<!-- 输出内部createElement函数 -->

这些属性和方法来自 Vue 的原型链,是 Vue 提供的内置工具。


四、关键观察与结论

通过调试工具查看console.log(vm),我们可以看到:

{name:"上高山",address:"长沙",abc:"123",_data:{...},_events:{...},$options:{...},$emit:function(),_c:function()}

✅ 观察总结:

发现解释
data属性都在vmVue 将data中的每个属性代理到实例上,方便访问
$options可用包含组件配置信息,如el,data,methods
$emit可用用于触发自定义事件
_c可用内部用于创建虚拟 DOM 的方法,一般不推荐直接调用

五、MVVM 的核心优势

  1. 数据驱动视图:无需手动操作 DOM,只需改变数据即可自动更新界面。
  2. 双向绑定:支持v-model实现表单与数据的实时同步。
  3. 分离关注点:业务逻辑(Model)、UI(View)、状态管理(ViewModel)清晰分离。
  4. 易于维护与扩展:组件化开发,利于团队协作。

六、结语

MVVM 模型是 Vue.js 的灵魂所在。它通过Vue 实例作为桥梁,实现了数据与视图的自动同步,极大地提升了开发效率和用户体验。理解 M、V、VM 三者的关系,是掌握 Vue 开发的第一步。

🚀 下一步建议:
学习v-modelcomputedwatch等特性,进一步掌握数据流动机制。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/3 4:05:46

UniApp 集成 SQLite 数据库完整教程

一、环境准备1. 平台支持情况​​App端(Android/iOS)​​: 完全支持SQLite数据库​​H5端​​: 不支持&#xff0c;需使用WebSQL或IndexedDB替代​​小程序端​​: 部分支持&#xff0c;需使用小程序自带的数据库API2. 插件安装推荐使用uni-sqlite插件&#xff0c;该插件对原生…

作者头像 李华
网站建设 2026/4/5 1:56:35

ChromeDriver版本匹配难?AI帮你查找对应关系

ChromeDriver版本匹配难&#xff1f;AI帮你查找对应关系 在自动化测试和爬虫开发的日常中&#xff0c;你是否也遇到过这样的场景&#xff1a;CI流水线突然报错&#xff0c;排查半天才发现是Chrome浏览器悄悄升级了&#xff0c;而本地或服务器上的 chromedriver 还停留在旧版本…

作者头像 李华
网站建设 2026/4/3 14:55:20

低成本训练的秘密:VibeThinker如何实现高数据利用率

低成本训练的秘密&#xff1a;VibeThinker如何实现高数据利用率 在大模型动辄千亿参数、训练成本突破百万美元的今天&#xff0c;一个仅用7,800美元训练出的15亿参数小模型&#xff0c;却能在AIME数学竞赛和编程算法任务中击败数十倍规模的对手——这听起来像技术界的“以小博大…

作者头像 李华
网站建设 2026/4/1 22:00:23

Geckodriver零基础实战指南:告别配置烦恼的终极解决方案

Geckodriver零基础实战指南&#xff1a;告别配置烦恼的终极解决方案 【免费下载链接】geckodriver WebDriver for Firefox 项目地址: https://gitcode.com/gh_mirrors/ge/geckodriver 还在为自动化测试环境的搭建而头疼吗&#xff1f;作为Firefox浏览器的核心WebDriver驱…

作者头像 李华
网站建设 2026/4/3 17:18:04

MTKClient刷机工具V6版本实战指南:常见问题深度解析与优化方案

MTKClient刷机工具V6版本实战指南&#xff1a;常见问题深度解析与优化方案 【免费下载链接】mtkclient MTK reverse engineering and flash tool 项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient MTKClient作为一款专业的联发科芯片设备刷机工具&#xff0c;其L…

作者头像 李华
网站建设 2026/3/13 3:30:04

C#算法题不会做?VibeThinker提供完整解法

VibeThinker-1.5B&#xff1a;小模型如何破解高难度算法题&#xff1f; 在 LeetCode 上卡壳、面试前刷题效率低下、竞赛中思路断片——这些几乎是每个程序员都经历过的窘境。传统上&#xff0c;我们会依赖大模型来生成代码或解释算法&#xff0c;但往往得到的是模糊的伪代码、逻…

作者头像 李华