位置: IT常识 - 正文

Vue学习——【第四弹】(vue系列教程)

编辑:rootadmin
Vue学习——【第四弹】 前言

推荐整理分享Vue学习——【第四弹】(vue系列教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue x,vue实用技巧,vue从入门到精通教程,vue从入门到实战,vue入门教程,vue x,vue系列教程,vue从入门到精通教程,内容如对您有帮助,希望把文章链接给更多的朋友!

上一篇文章 Vue学习——【第三弹】 中我们了解了MVVM模型,这篇文章接着学习Vue中的数据代理。

简单介绍

数据代理就是**一个对象(A)来代理对另一个对象(B)的属性操作(A一定要包含B)。**直接看定义大家可能觉得有些抽象,我们可以用代码来实现。

提到数据代理,我们会很容易想到一个重要的API:JavaScript中的Object.defineProperty() 方法:

通过对JavaScript的学习,我们知道可以用Object.defineProperty() 方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性,它的语法是这样的:

Object.defineProperty(obj, prop, desc)

obj 需要定义属性的当前对象 prop 当前需要定义的属性名 desc 属性描述符

该方法的工作机制: 给对象添加属性值 value 给对象添加getter和setter getter 和setter用于对属性的读写进行监控

并且该方法还具有一些配置项,比如:

enumerable:true,//enumerable用于控制属性是否可以枚举,默认值时false writable:true,//该配置项可以控制属性是否可以被修改,默认是false configurable:true//该配置项可以控制属性是否可以被删除,默认值是false

那么接下来我们就来看看Object.defineProperty() 方法的使用方式:

<!-- 数据代理:通过一个对象代理对另一个对象中的属性进行操作 --> <script type="text/javascript"> let obj1 = {a:100} let obj2 = {b:200} // 当访问obj2.a的时候,就调用get函数,然后返回obj1中的属性a;当修改obj2.a时,obj1.a就会被修改 Object.defineProperty(obj2,'a',{ get(){ console.log('obj1.a被读取') return obj1.a }, set(value){ console.log('obj.a被修改') obj1.a = value } }) </script>

在控制台上操作:

Vue中的数据代理

我们知道Vue是渐进式的JavaScript框架,而Vue中的数据代理所调用的API就是Object.defineProperty() 方法,我们举几个例子,来观察一下Vue中的数据代理的实现:

<div id="demo"> <h1>姓名:{{name}}</h1> <h2>地址:{{address}}</h2> </div> <script type="text/javascript"> const vm = new Vue({ el:'#demo', data:{ name:'小明', address:'山东' } }) </script>

控制台上操作:

Vue学习——【第四弹】(vue系列教程)

我们在控制台发现了熟悉的两个属性——name和address,并且点开它们我们可以看到它们的值就是我们代码中的值;

前文提到使用Object.defineProperty() 方法时,getter() 和setter() 用于对属性的读写进行监控,我们不妨来验证一下Vue数据代理中的getter()和setter()

捕获data

在验证setter()函数的调用之前,我们先看一下如何去获取data:

当我们直接去获取data时发现控制台返回 undefined 这时候我们看一下我们写的代码:

<div id="demo"> <h1>姓名:{{name}}</h1> <h2>地址:{{address}}</h2> </div> <script type="text/javascript"> const vm = new Vue({ el:'#demo', data:{ name:'小明', address:'山东' } }) </script>

我们不难看出,vm中的data其实是vm配置对象中的一个属性,并非全局变量,因此我们无法通过vm.data直接获取data,这时候想要获取data,就需要用到vm._data进行获取: 并且我们发现,在vm._data中还出现了data中的name和address属性。

其实,这里的vm._data就是我们想要获取的data,比如我们举个例子来验证一下:

我们将含有name和address属性的data作为一个全局变量写在 vm 的外部,然后在Vue实例中写上一个data;再在控制台比较vm._data是否和data相同,结果是返回true,很明显,两者是相同的。

简单描述一下Vue中的数据代理的过程: vm 拿到data中的数据后,放在了vm里的_data中。vm中的name和address代理了_data中的name和address。读取vm.name时,调用getter()方法,读取了_data中的name。 修改了vm中的name时,就会调用setter()方法去修改_data中的name。 如果不做代理,在“{{ }}”中须要这样写成“{{_data.xxx}}”的形式;通过Vue中的数据代理,我们就可以简化缩写内容,只需要些{{xxx}}的形式即可。

明白以上原理,我们就可以很容易明白在进行数据代理时对getter()和setter()的调用啦。

getter()

在我们读取vm中的name属性时,负责对name进行读取的函数getter()就会被调用,然后执行对data中的name属性值进行读取。

setter()

并且在模板中的花括号里的内容我们都可以写成 _data.xxx 的形式,通过Vue的数据代理,我们就无需如此繁琐的写成_data.xxx的形式。

小结

通过代码的验证,下图可以为我们展现出Vue中的数据代理机制:

参考文献

Vue官方文档 MDN官方文档 Vue技能树 B站视频讲解

如有不足,感谢指正!

本文链接地址:https://www.jiuchutong.com/zhishi/299413.html 转载请保留说明!

上一篇:前端页面项目——博客系统(前端页面设计)

下一篇:<input> 实现输入框只能输入数字(个人认为最好的)(input输入语句)

  • 2023深圳注册个体户办理过程需要多少钱

    2023深圳注册个体户办理过程需要多少钱

  • iqoo8pro怎么关闭应用推荐(iqoo8pro怎么关闭5g)

    iqoo8pro怎么关闭应用推荐(iqoo8pro怎么关闭5g)

  • 荣耀30没有耳机孔吗(荣耀30没有耳机吗怎么办)

    荣耀30没有耳机孔吗(荣耀30没有耳机吗怎么办)

  • QQ音乐付费音乐怎么下载(qq音乐付费音乐可以下载到U盘吗)

    QQ音乐付费音乐怎么下载(qq音乐付费音乐可以下载到U盘吗)

  • 计算器的日期键是什么(计算器日期键是什么字母)

    计算器的日期键是什么(计算器日期键是什么字母)

  • 手机wps表格序号下拉递增怎么办(手机wps表格序号下拉不递增怎么办)

    手机wps表格序号下拉递增怎么办(手机wps表格序号下拉不递增怎么办)

  • 域名结构有几层(域名的结构有哪些类型)

    域名结构有几层(域名的结构有哪些类型)

  • wifi显示无互联网连接(wifi显示无互联网连接有感叹号)

    wifi显示无互联网连接(wifi显示无互联网连接有感叹号)

  • 描述文件无法移除(描述文件无法移除手机会不会中毒)

    描述文件无法移除(描述文件无法移除手机会不会中毒)

  • wan灯不亮是欠费吗(wifi的wan灯不亮)

    wan灯不亮是欠费吗(wifi的wan灯不亮)

  • mx350显卡是gtx1050吗

    mx350显卡是gtx1050吗

  • 智能手机采用什么功能进行移动支付(智能手机采用什么信号)

    智能手机采用什么功能进行移动支付(智能手机采用什么信号)

  • 从手机号能查出什么信息(从手机号能查出这个人结婚了没)

    从手机号能查出什么信息(从手机号能查出这个人结婚了没)

  • 对方一直忙线中是不是设置了(对方一直忙线中微信)

    对方一直忙线中是不是设置了(对方一直忙线中微信)

  • wps/reset是什么意思(reset wps)

    wps/reset是什么意思(reset wps)

  • 手机休眠状态下为什么接不到微信(手机休眠状态下关闭网络)

    手机休眠状态下为什么接不到微信(手机休眠状态下关闭网络)

  • 怎么给公众号留言(怎么给公众号留电话号码)

    怎么给公众号留言(怎么给公众号留电话号码)

  • 进程有哪几部分组成(进程有哪几部分构成)

    进程有哪几部分组成(进程有哪几部分构成)

  • 苹果x绿线必须换屏吗(苹果x绿线不修没事吗)

    苹果x绿线必须换屏吗(苹果x绿线不修没事吗)

  • oracle默认用户名和密码(oracle的默认用户名)

    oracle默认用户名和密码(oracle的默认用户名)

  • 快手观看视频多久达标(快手观看视频多少钱)

    快手观看视频多久达标(快手观看视频多少钱)

  • 电脑怎么扫描文件步骤(电脑怎么扫描文件图片)

    电脑怎么扫描文件步骤(电脑怎么扫描文件图片)

  • 为什么新版微信无指纹(为什么新版微信朋友圈折叠了)

    为什么新版微信无指纹(为什么新版微信朋友圈折叠了)

  • gif动图可以发朋友圈吗(动图能发朋友圈吗?)

    gif动图可以发朋友圈吗(动图能发朋友圈吗?)

  • 怎样把相册里的照片拼在一起(怎样把相册里的图片合并在一起)

    怎样把相册里的照片拼在一起(怎样把相册里的图片合并在一起)

  • mcu是什么意思的缩写(mcu是干什么的)

    mcu是什么意思的缩写(mcu是干什么的)

  • Win10更新补丁KB5001330出现Bug怎么解决?(win10更新补丁卸载不了)

    Win10更新补丁KB5001330出现Bug怎么解决?(win10更新补丁卸载不了)

  • 应交税费负数调整到其他流动资产
  • 什么是价税分离?
  • 税负率的计算公式举例说明
  • 递延所得税费用在资产负债表哪一项
  • 增值税发票选择确认平台是什么?
  • 出口货物退税是指
  • 出借包装物收取的押金
  • 小规模开票多少不用交税
  • 社保工伤保险可以交两家公司吗
  • 土地出让金评估费怎么算
  • 企业收到个体户开的发票
  • 出售旧固定资产的税率是多少
  • 国外公司怎么付款给国内
  • 补去年的税款怎么做账
  • 超市的发票是什么种类
  • 增值税发票过期了税金怎么办
  • 增值税发票如何读入金税盘
  • 职工教育经费是多少
  • 销售折扣账务怎么处理
  • 买入返售金融资产什么意思
  • 向人力资源公司辞职怎么说
  • 企业收到财政专项资金账务处理
  • 汇算清缴补交所得税后报表需要调整吗
  • 购买电脑应该怎么做账
  • php输出mysql查询结果
  • linux系统添加静态路由命令
  • kavsvc.exe - kavsvc是什么进程 有什么作用
  • 怀特霍尔
  • 非货币性资产投资计入什么科目
  • Madonna della Corona教堂,意大利 (© Volodymyr Kalyniuk/Alamy)
  • 新准则与旧准则比较有哪些新变化
  • 销售使用过的固定资产3%减按2%
  • react hook详解
  • php实现数组排序,所有奇数在前偶数在后怎么排序
  • python自动化selenium
  • vue3.0项目实战视频
  • 织梦怎么添加相关
  • php array合并
  • 用cat命令创建f1和f2文件
  • 购买承兑的收益会计分录
  • 视同销售收入税法处理?
  • 公司买东西了怎么做账
  • 旅行社代订的机票可以退吗
  • mysql profiles
  • 公司活动赠送小礼品
  • 营业成本包含折旧和摊销吗
  • 未确认融资费用摊销额怎么计算
  • 其他权益工具账面价值和公允价值
  • 预缴税款是什么税款
  • 应交税费科目怎么调整
  • 应付账款入账金额可以包括哪些内容?
  • 办公室用茶叶怎么入账
  • 以前年度少结转成本怎么办
  • 建筑工程公司需要哪些资质证书
  • 外账需要计提存利息吗
  • 预缴所得税会计分录怎么做东奥
  • 开公司合理避税的方法
  • 挂靠地址如果被查了应该怎么处理?
  • 计提加计抵减额的会计处理
  • 进项税额抵扣好还是不抵扣好
  • ubuntu 安装zsh
  • linux find -perm 详解
  • solaris 11.4
  • win7开始菜单路径在哪里
  • win8创建系统映像
  • linux 详解
  • centos下载安装
  • win8系统搜索在哪里
  • linux gpfs
  • JavaScript中的数据类型分为两大类
  • 命令以管理员运行
  • python字典常用操作以及字典的嵌套
  • python自动发邮件内容
  • xml文件的数据如何读取
  • js文字滚动代码
  • 辽宁省视同缴费标准?
  • 浙江国税咨询电话12306
  • 河南省优秀班主任2022
  • 长沙市各个区的县市排名
  • 保税区社会车辆能进吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设