Vue核心 MVVM模型 数据代理

news2024/12/23 20:24:14

1.6.MVVM 模型

在这里插入图片描述

MVVM模型

  • M:模型 Modeldata中的数据
  • V:视图 View,模板代码
  • VM:视图模型 ViewModelVue实例

观察发现

  • data中所有的属性,最后都出现在了vm身上
  • vm身上所有的属性及Vue原型身上所有的属性,在Vue模板中都可以直接使用
<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <title>理解MVVM</title>
    <!-- 引入Vue -->
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
	<!-- 
		MVVM模型
			1.M: 模型Model,data中的数据
			2.V: 视图View,模板代码
			3.VM: 视图模型ViewModel,Vue实例
		观察发现
			1.data中所有的属性,最后都出现在了vm身上
			2.vm身上所有的属性及Vue原型身上所有的属性,在Vue模板中都可以直接使用
	 -->
    <!-- 准备好一个容器 -->
    <div id="root">
		<h2>名称:{{ name }}</h2> 
		<h2>战队:{{ rank }}</h2> 
		<h2>测试:{{ $options }}</h2>	<!-- 视图VIEW -->
    </div>

    <script type="text/javascript">
        // 阻止vue在启动时生成生产提示
        Vue.config.productionTip = false
		
		new Vue({ 
			el: '#root',  	  // 模型MODEL
			data:{ 
				name: 'uzi',  // 视图模型VIEWMODEL
				rank: 'RNG'
			},
		});
    </script>
</body>
</html>

在这里插入图片描述

1.7.Vue 中的数据代理

Object.defineproperty方法

<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <title>回顾Object.defineProperty方法</title>
    <!-- 引入Vue -->
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
    <!-- 准备好一个容器 -->
    <div id="root">
		
    </div>

    <script type="text/javascript">
        // 阻止vue在启动时生成生产提示
        let number = 18; 
        let person = { 
        	name: '张三', 
        	sex: '男', 
        };
        
        Object.defineProperty(person, 'age', {
        	value:18,
        	enumerable:true, 	// 控制属性是否可以枚举,默认值是false
        	writable:true,   	// 控制属性是否可以被修改,默认值是false
        	configurable:true, 	// 控制属性是否可以被删除,默认值是false
        	
        	// 当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值
        	get() { 
        		console.log('有人读取age属性了');
        		return number; 
        	},
        	
        	// 当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值
        	set(value) { 
        		console.log('有人修改了age属性,且值是', value); 
        		number = value;
        	}
        });
        
        // console.log(Object.keys(person)) 
        console.log(person)
    </script>
</body>
</html>

数据代理:通过一个对象代理对另一个对象中属性的操作(读/写)

<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <title>何为数据代理</title>
    <!-- 引入Vue -->
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
	<!-- 数据代理: 通过一个对象代理对另一个对象中的属性的操作, (读/写) -->
    <!-- 准备好一个容器 -->
    <div id="root">
		
    </div>

    <script type="text/javascript">
       let obj1 = { x: 100 }; 
	   let obj2 = { y: 200 };
	   
	   Object.defineProperty(obj2, 'x', { 
		   get() { 
			   return obj1.x 
			}, 
			set(value) { 
				obj1.x = value 
			} 
		});
    </script>
</body>
</html>

  1. Vue中的数据代理:通过vm对象来代理data对象中属性的操作(读/写)
  2. Vue中数据代理的好处:更加方便的操作data中的数据
  3. 基本原理
    1. 通过object.defineProperty()data对象中所有属性添加到vm
    2. 为每一个添加到vm上的属性,都指定一个 getter setter
    3. getter setter内部去操作(读/写)data中对应的属性

在这里插入图片描述

Vuedata中的数据拷贝了一份到**_data属性中,又将_data里面的属性提到Vue实例中(如name),通过defineProperty实现数据代理,这样通过geter/setter操作 name,进而操作_data中的 name。而_data又对data**进行数据劫持,实现响应式

<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <title>vue中的数据代理</title>
    <!-- 引入Vue -->
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
	<!-- 
		1.Vue中的数据代理:
			通过vm对象来代理data对象中属性的操作(读/写)
		2.Vue中数据代理的好处:
			更加方便的操作data中的数据
		3.基本原理
			通过object.defineProperty()把data对象中所有属性添加到vm上
			为每一个添加到vm上的属性,都指定一个 getter setter
			在getter setter内部去操作(读/写)data中对应的属性
	 -->
    <!-- 准备好一个容器 -->
    <div id="root">
		<h2>学校名称:{{ name }}</h2> 
		<h2>学校地址:{{ address }}</h2>
    </div>

    <script type="text/javascript">
        // 阻止vue在启动时生成生产提示
        Vue.config.productionTip = false
		
		const vm = new Vue({ 
			el: '#root',  	  
			data: { 
				name: '天侠',
				address: '福建厦门'
			}
		});
    </script>
</body>
</html>

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

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

相关文章

用友nc6 如果用户长时间没有任何操作,如何设置会话的失效时间?

1.web应用(新开的) NC中间件环境下的web profile和NC中间件没有关系&#xff0c;NC中间件只不过是个J2EE运行环境&#xff0c;是个Container&#xff0c;当你的web项目启动后&#xff0c;NC中间件创建web容器&#xff0c;其web应用的会话超时时间由你的web部署描述符&#xff…

电脑卡顿反应慢怎么办?这几招教给你!

电脑使用时间长了&#xff0c;电脑中的各种缓存文件也会就越来越多&#xff0c;这些文件的堆积会占用电脑内存从而导致电脑变得卡顿。还有在电脑中安装了许多软件&#xff0c;若这些软件都设置为开机自启动&#xff0c;这会占用大量的电脑内存&#xff0c;影响电脑的运行速度&a…

PMP项目管理备考资料都有哪些?

当今复杂多变的项目管理环境中&#xff0c;项目管理从业者在各种各样的项目环境中工作&#xff0c;一定会采用不同的项目方法。PMP认证试图覆盖业界所有有效的项目管理方法&#xff0c;PMP考试范围会覆盖预测型生命周期&#xff08;即瀑布式开发模式&#xff09;为代表的项目管…

什么是 MVVM?MVVM和 MVC 有什么区别?什么又是 MVP ?

目录标题 一、什么是MVVM&#xff1f;二、MVC是什么&#xff1f;三、MVVM和MVC的区别&#xff1f;四、什么是MVP&#xff1f; 一、什么是MVVM&#xff1f; MVVM是 Model-View-ViewModel的缩写&#xff0c;即模型-视图-视图模型。MVVM 是一种设计思想。 模型&#xff08;Model…

PerformanceTest, monitoring command

PerformanceTest, monitoring command 1、数据库 #查看最大连接数 show variables like max_connections; #例如:查看mysql连接数 show status like Threads%; 说明: threads_cached //查看线程缓存内的线程的数量 threads_connected //查看当前打开的连接的数量(打开的…

【Linux】6、在 Linux 操作系统中安装软件

目录 一、yum 命令二、安装 wget 一、yum 命令 类似 Linux 中的应用商店 &#x1f4c3;① yum 是 RPM 软件包管理器 ✏️ Red-Hat Package Manager &#x1f4c3;② yum 用于自动化安装、配置 Linux 软件&#xff08;可自动解决依赖问题&#xff09; &#x1f4c3;③ 语法&a…

面试2个月没有一个offer?阿里技术官的800页知识宝典打破你的僵局~

在经历了一波裁员浪潮后&#xff0c;大环境似乎有所好转&#xff0c;但对于面试者来说&#xff0c;面试愈发困难&#xff0c;现在面试官动不动就是底层原理&#xff0c;动不动就是源码分析&#xff0c;面试一定会抓你擅长的地方&#xff0c;一直问&#xff0c;问到你不会为止。…

MySQL之内置函数

目录 一 日期函数 主要实现的功能&#xff1a; 主要函数&#xff1a; 示例&#xff1a; 应用 二 字符串函数 主要实现的功能 1转换或者显示相关 2切割&#xff0c;插入&#xff0c;替换&#xff0c;连接&#xff0c;比较等功能性质的 3 其他 三 数学函数 1 运算 2 …

MySQL-运算符的使用解析

运算符的使用解析 1 运算符概述2 算数运算符3 比较运算符3.1 等于运算符&#xff08;&#xff09;3.2 安全等于运算符&#xff08;<>&#xff09;3.3 不等于运算符&#xff08;<> 或者 &#xff01;&#xff09;3.4 小于等于运算符&#xff08;<&#xff09;3.5…

Jmeter基础教程合集

环境搭建 1.安装java 8.0以上版本 2.下载jmeter并安装。安装参考网址&#xff1a;https://blog.csdn.net/wust_lh/article/details/86095924 3.打开JMeter中bin目录下面的jmeter.bat文件即可打开JMeter了&#xff0c;打开的时候会有两个窗口&#xff0c;Jmeter的命令窗口和Jme…

【数据结构】哈希表——闭散列 | 开散列(哈希桶)

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《数据结构与算法》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 哈希表 &#x1f3af;哈希&#x1f94a;直接定址法&#x1f94a;除留余数法&#x1f94a;哈…

CHAPTER 3: 《A FRAMEWORK FOR SYSTEM DESIGN INTERVIEWS》第3章 《面试系统设计框架》

CHAPTER 3: A FRAMEWORK FOR SYSTEM DESIGN INTERVIEWS 你刚刚获得了梦寐以求的理想公司的现场面试机会。招聘协调员给你发送了当天的日程安排。浏览列表&#xff0c;你会感觉很好直到你的目光落在这个面试环节——系统设计面试。 系统设计面试通常很吓人。它可以像“设计一个…

【Redis】缓存同步

【Redis】缓存同步 文章目录 【Redis】缓存同步1. 数据同步策略2. 异步通知策略3. Canal3.1 Canal客户端3.2 监听器 1. 数据同步策略 缓存数据同步的常见方式有三种&#xff1a; 设置有效期&#xff1a;给缓存设置有效期&#xff0c;到期后自动删除&#xff0c;再次查询时更新…

网络系统集成实验(四)| 系统集成路由器基本配置

目录 一、前言 二、实验目的 三、实验需求 四、实验步骤与现象 &#xff08;一&#xff09;静态路由 Step1&#xff1a;构建实验拓扑如下 Step2&#xff1a;IP地址配置如下 Step3&#xff1a;配置静态路由 Step4&#xff1a;验证 &#xff08;二&#xff09;NAT配置—…

OpenPCDet复现过程记录

0、前言 OpenPCDet项目之前我就复现过&#xff0c;一个很优秀的项目&#xff0c;这几天又需要用到这个项目&#xff0c;再次复现遇到了不少问题&#xff0c;特此记录复现的流程 1、环境准备 1.1、前置条件 以下是我安装的版本 CUDA 11.3CUDNN 8.2.1 CUDA和CUDNN安装可以参考…

Yolo v1 笔记

个人不太懂的点 1.损失函数的4与5项 【论文解读】Yolo三部曲解读——Yolov1 - 知乎 https://www.youtube.com/watch?vNkFENlEb4kM&t672s 训练阶段&#xff1a; C_i 预测值&#xff1a;由网络输出出来7*7*30中第一个bbox和第二个bbox的置信度confidence C_i^hat 标签值…

(六)大数据实战——hadoop集群实现免密登录和文件互传

前言 本节内容我们主要介绍一下hadoop集群服务器之间实现免密登录和文件互传的功能&#xff0c;这样更加方便我们使用hadoop服务器实现服务器之间的相互登录和文件的相互传输。集群之间的访问不在需要授权就可以实现相互访问。 正文 SSH免密登录 ①分别在hadoop101、hadoop1…

后台管理系统之登录方案记录

需求&#xff1a;根据当前环境的不同&#xff0c;请求不同的 BaseUrl 解决&#xff1a;在根目录中新建.env.development与.env.production连个文件&#xff0c;进行配置&#xff1a; # .env.production ENV production# base api VUE_APP_BASE_API /prod-api# .env.develop…

目标检测——YOLOv8(十四)

简介&#xff1a; YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本&#xff0c;目前支持图像分类、物体检测和实例分割任务。不过 ultralytics 并没有直接将开源库命名为 YOLOv8&#xff0c;而是直接使用 ultralytics 这个词&#xff0c;原…

nodejs+vue 学分置换管理系统

在大学四年参加了各类竞赛后&#xff0c;我发现参加各类比赛存在报名过程过于繁琐&#xff0c;评比过程不透明和易出错等问题&#xff0c;所以在定题时与老师商讨后确定设计和实现基于nodejs的高校竞赛信息发布系统&#xff0c;帮助老师发布竞赛内容&#xff0c;便于同学们线上…