vue基础篇 - 理解MVVM和数据代理

180 阅读2分钟

「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战」。


上一篇我讲解了vue中的实例对象,这篇我讲一下MVVM模型和数据代理是什么。vue是参考了MVVM模型创造了vue.js,所以我们很是要了解一下MVVM模型,MVVM是Model-View-ViewModel的简写,MVVM优点低耦合可重用性,拆开来解读 M:模型(Model) :data中的数据; V:视图(View) :模板代码;VM:视图模型(ViewModel):Vue实例;MVVM就类似于信息中转站,如下图:

1636082324(1).png

<body>
		<div id="root">
			<h1>学校名称:{{name}}</h1>
			<h1>学校地址:{{address}}</h1>
			<!-- <h1>测试一下1:{{1+1}}</h1>
			<h1>测试一下2:{{$options}}</h1>
			<h1>测试一下3:{{$emit}}</h1>
			<h1>测试一下4:{{_c}}</h1> -->
		</div>
	</body>

	<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

		const vm = new Vue({
			el:'#root',
			data:{
				name:'VUE大学',
				address:'广州',
			}
		})
		console.log(vm)
	</script>

我理解的MVVM是什么已经和大家说完了,接下来我给大家讲讲关于vue中数据代理的概念;数据代理我的理解是通过一个对象代理对另一个对象中属性的操作(读/写)的行为就是数据代理。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>何为数据代理</title>
	</head>
	<body>
		<script type="text/javascript" >
			let obj = {x:100}
			let obj2 = {y:200}

			Object.defineProperty(obj2,'x',{
				get(){
					return obj.x
				},
				set(value){
					obj.x = value
				}
			})
		</script>
	</body>
</html>

Vue中的数据代理就是通过vm对象来代理data对象中属性的操作的行为

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>Vue中的数据代理</title>
		<!-- 引入Vue -->
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!-- 准备好一个容器-->
		<div id="root">
			<h2>学校名称:{{name}}</h2>
			<h2>学校地址:{{address}}</h2>
		</div>
	</body>

	<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
		
		const vm = new Vue({
			el:'#root',
			data:{
				name:'VUE',
				address:'IT科技园'
			}
		})
	</script>
</html>

总结vue中数据代理的理解:

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

本次的vue中的MVVM和数据代理已经讲完了,下一期我会说一下vue中的事件和其他问题;