理解 Vue 中的 MVVM 思想

news2024/11/28 14:15:11

1. 什么是 Vue

Vue 是一套用于构建用户界面的渐进式 JavaScript 框架, 与其他大型框架不同的是, Vue 被设计为可以自底向上逐层应用, Vue 的核心库只关心视图层, 方便与第三方库或既有项目整合.

2. JavaScript 框架了解

  • jQuery : 大家熟悉的 JavaScript 框架, 优点是简化了 DOM 操作, 缺点是 DOM 操作太频繁, 影响前端性能.
  • Angular : Google 收购的前端框架, 其特点是将后台的  MVC 模式搬到了前端并增加了模块化开发的理念 (对后台程序员友好, 对前端程序员不太友好).
  • React : Facebook 出品, 一款高性能  JS 前端框架; 提出了 虚拟 DOM 的概念, 用于减少真实 DOM 的操作, 在内存中模拟 DOM 操作, 有效的提升了前端渲染效率; 缺点是使用复杂, 因为需要额外学一门 【JSX】语言.
  • Vue : 一款渐进式 JavaScript 框架, 其特点是综合了 Angular (模块化) 和  React (虚拟 DOM) 的优点;
  • Axios : 前端通信框架; 因为 Vue 的边界很明确, 就是为了处理 DOM, 所以并不具备通信能力, 此时就需要使用一个通信框架与服务器交互; 当然也可以直接选择使用 jQuery 提供的 Ajax 通信功能.

3. 了解 MVVM 模型

  • Model : 模型层, 在这里表示 JavaScript 对象.
  • View : 视图层, 在这里表示 DOM (HTML 操作的元素).
  • ViewModel : 连接视图和数据的中间件, Vue.js 就是 MVVM 中 ViewModel 层的实现者.

在 MVVM 模式中, 是不允许 数据 和 视图 直接通信的, 只能通过 ViewModel 来通信.

 MVVM 模式中, model 层的数据发生变化后, View 层的数据也要随之跟着变化, 这是一个瞬间完成的动作.  以前是需要刷新页面才会变化.

4. 第一个 Vue 程序

<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!-- Vue 层 模板 -->
<div id="app">
    {{message}}
</div>

 <!-- 1. 导入 Vue.js -->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
    var vm = new Vue({
        el: "#app",
        // Model: 数据
        data:{
            message: "hello Vue"
        }
    });
</script>
</body>
</html>

第一个 Vue 程序的流程就是以下五步 : 

  1. 导入 Vue.js
  2. new 一个 Vue 对象
  3. 绑定一个元素
  4. 放数据
  5. 从模版里取出来

【理解思想】如何体现出 MVVM 模式呢 ??

Model 就是 Vue 对象中的 data 数据,  View 就是上面的 Vue 层模版.

理解思想】ViewModel 如何体现出来的呢 ??

      访问页面后, 使用开发者工具打开, 在控制台下面更改 message 的值, View 层也会立马改变. 这就是 ViewModel, 他可以根据数据变化立马响应前端. 我们正常写前端, 必须刷新页面才会看到变化. 

     View 层的模版会监听下面的数据, 随着 data 中数据的变化, ViewModel 就会及时运行, 及时编译, View 层就会立马随之改变, 他没有操作 DOM, 这个就叫做虚拟 DOM.  而我们以前写前端, 是需要操作 DOM 并刷新页面,  View 才会随之改变. 至此, 我们就明白了, Vue.js 就是一个 MVVM 模式的实现者, 他的核心就是实现了 DOM 监听和数据绑定.

【总结】所以为什么要使用 MVVM 模式, 他其实和 MVC 模式一样, 主要目的就是分离视图 (View) 和模型 (Model). 

他有如下几点好处 : 

1. 低耦合 :  视图可以独立于 Model 变化和修改, 一个 ViewModel 可以绑定不同的 View 上, 当 View 变化的时候, Model 可以不变, 当 Model  变化的时候, View 也可以不变.

2. 可复用 : 你可以把一些视图逻辑放在一个 ViewModel 里面, 让很多 View 重用这段视图逻辑.

3. 独立开发 : 开发人员可以专注于业务逻辑和数据的开发 (ViewModel), 设计人员可以专注于页面设计.

4. 可测试 : 界面素来是比较难于测试的, 而现在测试可以针对 ViewModel 来写.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/620299.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VulnHub项目:MONEY HEIST: 1.0.1

靶机地址&#xff1a;Money Heist: 1.0.1 ~ VulnHub 渗透过程&#xff1a; 确定靶机ip&#xff0c;攻击机kali的ip 对靶机进行端口检测 存在22、53、80、3000、3001端口&#xff0c;访问80端口 发现了登录注册按钮&#xff0c;尝试进行注册 注册成功后进行登录&#xff0c…

VulnHub项目:Gaara

项目地址&#xff1a;Gaara: 1 ~ VulnHub 我爱罗&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;火影前200集无敌存在&#xff01;&#xff01;&#xff01; 渗透过程&#xff1a; 收集三件套&#xff01;搞一手~&#xff0c;发现80&#xff0c;访问web&…

第四节 ogre 2.3实现一个简单的模型纹理贴图

本节简单介绍下如何使用Ogre 2.3加载模型&#xff0c;并给模型贴上纹理材质。 一. 安装ogre 2.3 主要有两种安装方法&#xff1a; 简单安装方法&#xff0c;使用scripts for Ogre 2.3 脚本,按照官网给出的步骤安装即可。需要注意的是脚本解压后的 *.bat 文件需要修改下 CMAK…

【Java|golang】2611. 老鼠和奶酪

有两只老鼠和 n 块不同类型的奶酪&#xff0c;每块奶酪都只能被其中一只老鼠吃掉。 下标为 i 处的奶酪被吃掉的得分为&#xff1a; 如果第一只老鼠吃掉&#xff0c;则得分为 reward1[i] 。 如果第二只老鼠吃掉&#xff0c;则得分为 reward2[i] 。 给你一个正整数数组 reward1…

SpringCloud-Gateway过滤器

路由过滤器 GatewayFilter GatewayFilter 是网关中提供的一种过滤器&#xff0c;可以对进入网关的请求和微服务返回的响应做处理。 路由过滤器的作用是什么&#xff1f; 对路由的请求或想象做加工处理&#xff0c;比如添加请求头配置子路由下的过滤器只对当前路由的请求生效…

monkey测试关机/重启问题分析(二)

systemui关机dialog相关 1、systemui下拉关机按钮 通过Android 布局分析工具发现 按钮布局 base/packages/SystemUI/res-keyguard/layout/footer_actions.xml 按钮初始化和点击事件 frameworks/base/packages/SystemUI/src/com/android/systemui/qs/FooterActionsControlle…

斐波那契算法的理解

1.斐波那契数列 &#xff1a; 数组&#xff1a;int[] F{1, 1, 2, 3, 5, 8, 13, 21, 34, 55 }; 特点&#xff1a; 从第三个数开始&#xff0c;后边每一个数都是前两个数的和 。F[k]F[k-1]F[k-2]; 如图所示&#xff1a; ①low、mid、high都是F数组的索引&#xff0c;F[k]-1表示…

基础实验篇 | 课程总体介绍(一)

本讲主要介绍多旋翼的特点及选用多旋翼作为实验平台的原因、对于无人系统教育的一些新需求、RflySim平台对于飞控的底层控制算法的开发优势、本期平台课程的设置、以及如何开发自驾仪系统。 相较于固定翼和直升机&#xff0c;多旋翼具有机械结构简单、 易维护的优点。以四旋翼…

操作Arrays.asList的list报UnsupportedOperationException的坑

Arrays.asList() 将数组转换成List集合 /*** Returns a fixed-size list backed by the specified array. (Changes to* the returned list "write through" to the array.) This method acts* as bridge between array-based and collection-based APIs, in* com…

通过Python封装商品ID获取阿里巴巴商品详情数据,阿里巴巴商品详情数据API接口,阿里巴巴API接口

目的&#xff1a;通过Python封装商品ID获取阿里巴巴商品详情数据&#xff0c;本文将给出Python代码的一些思路和示例。 首先&#xff0c;你需要找到获取阿里巴巴商品详情数据的API接口。阿里巴巴开放平台提供了一些API接口&#xff0c;例如阿里巴巴开放平台商品API&#xff0c…

软件开发项目成本控制的7个重点

1、精细计划预算和管控机制 制定详细的项目计划和预算&#xff0c;包括资源需求、人力资源、时间表和财务预测等&#xff0c;以确保项目不会超出预算。实时跟踪项目的实际开支和进度&#xff0c;并对计划进行调整&#xff0c;以便更好地管理成本。 软件开发项目成本控制的7个重…

MongoDB Study Notes

文章目录 1 MongoDB快速入门1.1 什么是MongDB1.2 部署安装——基于docker1.3 基本概念1.4 基本操作1.4.1 查看所有数据库1.4.2 切换数据库1.4.3 创建数据库1.4.4 删除数据库1.4.5 查看数据库中表1.4.6 新增数据1.4.7 查询数据1.4.8 更新数据1.4.8.1 更新不存在字段1.4.8.2 更新…

Nginx 504 gateway timeout

方案 调整这几个参数来调大nginx的超时时间。 proxy_connect_timeout proxy_send_timeout proxy_read_timeoutnginx 三个代理超时时间配置 proxy_connect_timeout 60s; Defines a timeout for establishing a connection with a proxied server. It should be noted that thi…

【期末划重点】计算机英语(2)(更新中)

阿金的计算机英语&#xff0c;线下考试版~ 时隔半年&#xff0c;又开始赌徒模式啦 这次尝试用大数据文本分析&#xff0c;精准备考 欢迎补充 2023计英期末考赌徒版 Part 1 词汇题&#xff08;20题&#xff0c;40分&#xff09;1、词库说明2、本题答题技巧3、背词方法4、完整词库…

【Python实战】Python采集情感音频

成年人的世界真不容易啊 总是悲伤大于欢喜 爱情因为懵懂而快乐 却走进了复杂和困惑的婚姻 前言 我最近喜欢去听情感类的节目&#xff0c;比如说&#xff0c;婚姻类&#xff0c;我可能老了吧。我就想着怎么把音乐下载下来了&#xff0c;保存到手机上&#xff0c;方便我们业余时…

jdk配置语句以及idea配置问题idea科学使用

一、第一步上链接 官网地址&#xff0c;不过每次都在变版本不过都一样没事&#xff1a; https://www.oracle.com/java/technologies/downloads/ idea2021官网 https://www.jetbrains.com/zh-cn/idea/download/other.html 你可以下载右边付费的版本&#xff0c;如果想下载左边…

IPO观察丨绿源持续推进IPO,这次不止“一部车能骑10年”

近期&#xff0c;国内两轮电动车行业又有新动态。业内老牌企业绿源集团更新招股书&#xff0c;继续推进上市进程&#xff0c;中信建投国际担任保荐人。 其实去年11月&#xff0c;绿源已向港交所递交招股书&#xff0c;只不过受若干原因影响&#xff0c;在今年5月失效。当然&am…

synchronized简单理解

一、简述 1.1 synchronized介绍 synchronized是一种互斥锁&#xff0c;也成为同步锁&#xff0c;它的作用是保证在同一时刻&#xff0c;被修饰的代码块或方法只会有一个线程执行&#xff0c;以到达保证并发安全效果。在JDK1.6以前&#xff0c;很多人称之为重量级锁&#xff0…

作为一名仓库管理人员,如何有效地管理仓库?

作为一名仓库管理人员&#xff0c;如何有效地管理仓库&#xff1f; 有效仓库管理主要可以分为四个方面&#xff1a; 出入库 库存调拨 库存盘点 虚拟库存/实际库存管理 当然仓库管理最基本的硬件条件还是需要准备好的&#xff0c;比如将仓库分一下区域&#xff0c;以便之后商…

layui(3)——内置模块弹出层

弹出层 1.基础参数 使用模块layer layui.use(layer, function(){var layer layui.layer;}); <script>layui.use(layer, function () {var layer layui.layer;layer.open({// layer提供了5种层类型。可传入的值有&#xff1a;0&#xff08;信息框&…