vue中的数据代理

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

原理:通过vm对象来代理 Vue 中我们自己定义在data中的数据,
首先: 我们自己定义的data中的对象或者属性 都会存储到vm中的_data 中进行数据劫持
其次: 通过Object.defineProperty() 方法的getter 和  setter  将_data中的数据设置到vm本身,从而更方便去使用

学习  Object.defineProperty()    话不多说直接上图

 1 <template>
2 <div class="home">
3 </div>
4 </template>
5
6 <script>
7 // @ is an alias to /src
8
9 export default {
10 name: 'DefinePropoty',
11 components: {
12 },
13 mounted () {
14 var that = this
15 Object.defineProperty(this.person, 'age', {
16 value: 'boy', // 设置值
17 enumerable: true, // 可遍历
18 writable: true, // 是否可以被修改
19 configurable: true, // 控制是否可以被删除
20 // 当有人读取age的属性的时候 get就会呗调用 且get的返回值是age的值
21 get () {
22 return that.number
23 },
24 // 当有人修改age属性的时候 触发 且参数为修改的值
25 set (val) {
26 that.number = val
27 }
28 })
29 // this.$delete(this.person, 'sex') 删除对象的属性
30 // 访问age
31 console.log(this.person.age)
32 // 修改age
33 this.person.age = 666
34 },
35 data () {
36 return {
37 number: 20,
38 person: {
39 name: 'GQ',
40 sex: '男',
41 age: this.number
42 }
43 }
44 }
45 }
46 </script>

实例  : 通过 obj2代理obj1

 1 <template>
2 <div>
3 <!-- 数据代理 修改一个对象的某个属性另外一个对象也随之改变 -->
4 </div>
5 </template>
6
7 <script>
8 export default {
9 name: 'DataMange',
10 mounted () {
11 var that = this
12 // 给obj2添加一个x属性 有人读取就返
13 Object.defineProperty(this.obj2, 'x', {
14 // 有人读取obj2 的x就把obj1的X给他
15 get () {
16 return that.obj1.x
17 },
18 // 有人修改obj2的x就把obj1的x也修改
19 set (val) {
20 that.obj1.x = val
21 }
22 })
23 console.log(that.obj2.x)
24 that.obj2.x = 6666
25 console.log(that.obj1.x)
26 },
27 data () {
28 return {
29 obj1: {
30 x: 66
31 },
32 obj2: {
33 y: 888
34 }
35 }
36 }
37 }
38 </script>
39
40 <style lang="scss" scoped>
41 </style>
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: vue

“vue中的数据代理” 的相关文章

『0014』 - Solidity Types - 动态大小字节数组(Dynamically-sized byte array)_动态byte数组

作者:黎跃春,一、Dynamically-sized byte array string 是一个动态尺寸的UTF-8编码字符串,它其实是一个特殊的可变字节数组,string是引用类型,而非值类型。 bytes 动态字节数组,引用类型。根据经验,在我们不确定字节数据大小的情况下,我们可以使用strin...

git clone 项目报错early EOF 的解决方式

年后第一天开工拉取代码时遇到一个报错,early EOF,上网查说一般出现这种错误的原因是目标仓库太大了,顾尝试修改git缓存后重试: git config --global http.postBuffer 1048576000 将ht...

如何转化成php文件格式 - 编程语言

本篇内容介绍了“如何转化成php文件格式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 首先,我们需要一个文本编辑器,如Windows自带的...

PHP怎么实现表单数据修改 - 编程语言

这篇文章主要介绍“PHP怎么实现表单数据修改”,在日常操作中,相信很多人在PHP怎么实现表单数据修改问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP怎么实现表单数据修改”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!...

QSettings读写注册表

#include <iostream> #include <QSettings> #include <QString> #include <QStringList> using namespace std; void writeSettings(){...

19Mn6执行标准、19Mn6力学性能、19Mn6期货订轧

1、19Mn6钢板简介:19Mn6是德标耐高温高压锅炉容器钢板,与国标Q345R以及欧标P355GH相接近,执行标准为DIN17155标准,国内舞钢可生产并且已达到国际先进水平。19Mn6钢板的交货状态:一般为正火,可根据实际使用要求,双方协定钢板的交货状态,并在合同当中注明。19Mn6钢板牌号表示...