「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战」。
上一篇我讲解了vue中的实例对象,这篇我讲一下MVVM模型和数据代理是什么。vue是参考了MVVM模型创造了vue.js,所以我们很是要了解一下MVVM模型,MVVM是Model-View-ViewModel的简写,MVVM优点低耦合可重用性,拆开来解读 M:模型(Model) :data中的数据; V:视图(View) :模板代码;VM:视图模型(ViewModel):Vue实例;MVVM就类似于信息中转站,如下图:
<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中数据代理的理解:
- Vue中的数据代理:通过vm对象来代理data对象中属性的操作(读/写)
- Vue中数据代理的好处:更加方便的操作data中的数据
- 基本原理:通过Object.defineProperty()把data对象中所有属性添加到vm上。为每一个添加到vm上的属性,都指定一个getter/setter。在getter/setter内部去操作(读/写)data中对应的属性。
本次的vue中的MVVM和数据代理已经讲完了,下一期我会说一下vue中的事件和其他问题;