vue中的数据代理
原理:通过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>
vue中的数据代理的更多相关文章
- es6中的Proxy和vue中的数据代理的异同
1:概述 1-1:Proxy 用于修改某些操作的默认行为,Proxy可以说在对对象进行各种访问或者操作的时候在外层进行一层拦截,在操作之前都需要经过这种拦截.proxy返回的是一个新对象,可以通过操作 ...
- vue中的数据代理原理
const vm = new Vue({ data:{ name:'boos' } }) // 注意 :使用构造函数构建vue实例时,传入的是一个option对象,它包含了data,computed等 ...
- vue中的数据监听以及数据交互
现在我们来看一下vue中的数据监听事件$watch, js代码: new Vue({ el:"#div", data:{ arr:[,,] } }).$watch("ar ...
- Vue源码中的数据代理
直接开讲: 由于这个Vue底层封装的函数太多了,我这里只讲思路不说具体的执行了什么函数. const vm=new Vue({这里写一个data,可以是对象也可以是函数}) 在写这段代码的时候 ...
- vue中的数据双向绑定
学习的过程是漫长的,只有坚持不懈才能到达到自己的目标. 1.vue中数据的双向绑定采用的时候,数据劫持的模式.其实主要是用了Es5中的Object.defineProperty;来劫持每个属性的get ...
- vue中当数据改变时更新DOM
具体场景: 当vue中使用swiper, better-scroll时候,我们需要去new Swiper,new [better-scroll]来获取实例,通常我们页面的数据都是异步获取的, 会导致我 ...
- vue中访问数据接口的配置
业务API接口地址: http://localhost:3816/api/ 前端UI浏览地址:http://127.0.0.1:8080/#/home 由于同源策略的问题: 需要配置代理: 在开发环境 ...
- vue中axios配置代理的俩种方式及优缺点
概述:Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中 当我们使用vue向服务器发送AJAX请求时,我们会遇到跨域问题,一般跨域的解决方案有俩种,一种是官 ...
- 在Vue 中调用数据出现属性不存在的问题
这已经是我在调用数据时趟过几次的坑了,索性记录下来防止后面再犯: 一般我们请求数据来渲染一个页面的时候,请求下来的数据基本上都是数组或是对象,再通过列表循环和插值表达式渲染的页面:在data 中提前声 ...
- vue中展示数据
1.v-bind,直接把数据绑定进去了.*100是因为传过来的数据为数字0.3这样子,要转换成百分比 2.整个的数据再data中定义之后,就能在页面直接绑定,v-for,v-if等单独再设置.
随机推荐
- LinkedBlockingQueue出入队实现原理
类图概述 由类图可以看出,L是单向链表实现的,有两个ReentrantLock实例用来控制元素入队和出队的原子性,takeLock用来控制只有一个线程可以从队头获取元素,putLock控制只有一个线程 ...
- java创建线程的方式有几种?
java中创建线程的方式有多少种,这个问题也是众多纷纭,这个时候更应该参考官方文档(https://docs.oracle.com/javase/8/docs/api/java/lang/Thread ...
- Java基础关于栈和堆的内存分配问题(转载)
AVA在程序运行时,在内存中划分5片空间进行数据的存储.分别是:1:寄存器.2:本地方法区.3:方法区.4:栈.5:堆. 基本,栈stack和堆heap这两个概念很重要,不了解清楚,后面就不用学了. ...
- 逍遥自在学C语言 | 逻辑运算符
前言 一.人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 -- 自在. 第二位上场的是和我们一起学习的小白程序猿 -- 逍遥. 二.构成和表示方式 逻辑运算符是用来比较和操作布尔值的运算符 ...
- 【前端黑魔法】浏览器打开任意可执行exe文件方法
思路:通过注册表注册自定义URL协议执行bat脚本,将文件路径作为参数传入 环境:win10 前置问题与条件 问题1:可以从浏览器直接打开可执行文件吗? 答:不能.其实可以通过 ActiveXObje ...
- proprety详解
property() 函数和@property修饰符. 第一种方法,使用property() 函数: class Person: def __init__(self): self.__name= No ...
- 【云享专刊】开源遇上华为云,OCP架构变身“云原生框架”
摘要:华为云DTSE团队出品云原生改造指南,助力轻松实践OCP上云. 本文分享自华为云社区<[云享专刊]开源遇上华为云,OCP架构变身"云原生框架">,作者:华为云社区 ...
- Yolov8离谱报错
YoloV8离谱报错 今天下午给一个研究生小姐姐跑数据集,用的是yolov8在恒源云上租的4070的GPU服务器,跑垃圾分类数据集(https://blog.csdn.net/m0_5488250 ...
- Scanner对象的用法
Java流程控制 想要实现程序与人的交互,我们必须使用Java给我们提供的工具类.就像我最开始写的一篇博客,用Java提供给我们的一个机器人类Robot是控制鼠标键盘的.今天我们学习的是一个可以获取用 ...
- prometheus node-exporter安装
目录 prometheus node-exporter安装 包安装在linux服务器 Daemonset安装 Docker安装 helm安装 prometheus node-exporter安装 安装 ...