位置: 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输入语句)

  • 抖币可以买抖音里的商品吗(抖币可以买东西吗)

    抖币可以买抖音里的商品吗(抖币可以买东西吗)

  • 电脑怎么录屏幕视频带声音(电脑怎么录屏幕视频)

    电脑怎么录屏幕视频带声音(电脑怎么录屏幕视频)

  • 微信群公告怎么点完成(微信群公告怎么撤回)

    微信群公告怎么点完成(微信群公告怎么撤回)

  • 华为p30是什么屏呢(华为p30是什么屏幕lcd屏幕么)

    华为p30是什么屏呢(华为p30是什么屏幕lcd屏幕么)

  • iphone11能设置几个面容(苹果11可以设置几位数密码)

    iphone11能设置几个面容(苹果11可以设置几位数密码)

  • 华为怎么设置两个系统桌面(华为怎么设置两个桌面)

    华为怎么设置两个系统桌面(华为怎么设置两个桌面)

  • Excel表格自动套用格式怎么设置(excel表格自动套用三维效果2)

    Excel表格自动套用格式怎么设置(excel表格自动套用三维效果2)

  • 苹果辅助触控自动消失什么原因(苹果辅助触控自动关闭怎样解决)

    苹果辅助触控自动消失什么原因(苹果辅助触控自动关闭怎样解决)

  • 淘宝买东西店铺不存在了怎么办(淘宝买东西店铺关了,怎么售后)

    淘宝买东西店铺不存在了怎么办(淘宝买东西店铺关了,怎么售后)

  • wps护眼取消还是绿色(护眼模式wps怎么取消)

    wps护眼取消还是绿色(护眼模式wps怎么取消)

  • 安卓和苹果抖音币比例一样吗(安卓和苹果抖音IP属地)

    安卓和苹果抖音币比例一样吗(安卓和苹果抖音IP属地)

  • 华为mate30pro和mate30pro5g有什么区别(华为mate30pro和mate50pro哪个好)

    华为mate30pro和mate30pro5g有什么区别(华为mate30pro和mate50pro哪个好)

  • 美团行为存在异常怎么解决(美团行为存在异常无法申请退款)

    美团行为存在异常怎么解决(美团行为存在异常无法申请退款)

  • 为什么微信自动退出登录(为什么微信自动删除好友)

    为什么微信自动退出登录(为什么微信自动删除好友)

  • 天猫魔盒卡顿怎么办(天猫魔盒有点卡了怎么办)

    天猫魔盒卡顿怎么办(天猫魔盒有点卡了怎么办)

  • 苹果6sp支持多少w充电(苹果6plus怎么更新到ios13)

    苹果6sp支持多少w充电(苹果6plus怎么更新到ios13)

  • 苹果10防水吗(苹果14防水吗)

    苹果10防水吗(苹果14防水吗)

  • html表格居中怎么设置(html表格设置居中)

    html表格居中怎么设置(html表格设置居中)

  • 仅在wifi环境下载在哪里关闭(关闭仅在wifi环境下载)

    仅在wifi环境下载在哪里关闭(关闭仅在wifi环境下载)

  • world文档怎么删页数(world文档怎么删页面)

    world文档怎么删页数(world文档怎么删页面)

  • 苹果无线充支持多少w(苹果无线充支持Qi协议吗)

    苹果无线充支持多少w(苹果无线充支持Qi协议吗)

  • 小米8怎么用wifi开热点(小米8怎么用OTG传歌到mp3)

    小米8怎么用wifi开热点(小米8怎么用OTG传歌到mp3)

  • 红米note8pro上市时间(红米note8pro 发布)

    红米note8pro上市时间(红米note8pro 发布)

  • 防误触模式有什么用(防误触模式什么意思平板)

    防误触模式有什么用(防误触模式什么意思平板)

  • 微信运动显示路线吗(微信运动怎样显示我的行走路线)

    微信运动显示路线吗(微信运动怎样显示我的行走路线)

  • 滴滴快车包括空调费吗(滴滴快车包括空车吗)

    滴滴快车包括空调费吗(滴滴快车包括空车吗)

  • 如何判断ic卡和id卡 (如何分辨ic卡还是cpu卡)

    如何判断ic卡和id卡 (如何分辨ic卡还是cpu卡)

  • 房地产房屋质量检测
  • 投资款转账没备案怎么办
  • 属于企业期间费用的有
  • 未达起征点销售额,11栏怎么填写
  • 小汽车的增值税怎么算
  • 怎样查验电子发票真伪
  • 申报查询里面找不到才申报的个税
  • 设计服务需要交文化建设费吗
  • 股权增值转让的财税处理
  • 现金出资可以吗
  • 发票认证了但是没记账
  • 建筑企业差额征税账务处理
  • 工行代收资金清算过渡户是什么?
  • 金税盘和报税盘图片
  • 分包发票怎么开对方可以差额纳税
  • 律师事务所的会计账务处理
  • 提现的现金支票是什么
  • 小规模劳务公司税率是多少
  • 存货成本包括哪些项目
  • 税金及附加包括地方教育费附加吗
  • 物流服务费税率是多少
  • 换汇成本怎么计算
  • 长期股权投资减值的判断依据
  • 库管和车间工人哪个好
  • 存货减值账务处理 华图
  • 电脑怎么安装双显卡
  • win11任务栏无法居中
  • 如何取消网络拦截
  • 赡养人 被赡养人
  • macos itunes
  • 公交车停车场收费吗
  • 办公楼需要什么
  • 公司网站维护费用计哪个科目
  • 资产负债表利润表的勾稽关系
  • 土地出让金抵减增值税账务处理
  • 微信小程序设计规范(官方)文档
  • 相机4244
  • docker运行多个镜像
  • erp面试题目100及最佳答案
  • php定义方法
  • php对接公众号支付
  • 哪些计入其他收益与营业外收入
  • 信息系统服务属于什么类
  • 其他业务收入不交增值税吗
  • 苹果cms仿站教程
  • 利用职务之便谋取私利是什么罪
  • 债券回售手续费是多少
  • 劳务是什么单位
  • 个人所得税专项扣除2023最新政策
  • 应付账款账务处理中的错弊
  • 小规模纳税人增值税专用发票税率
  • 非广告性质的赞助支出调增还是调减
  • 参加会计专业技术资格考试的人员,应具备那些条件
  • 预收账款的核算处理
  • 劳务费怎么要的回来
  • 应付账款重分类是什么意思
  • 融资租赁算非标业务吗
  • 合同资产根据什么来编报表
  • 机关和事业单位党的支部委员会每届任期
  • 多缴纳了个税税率怎么办
  • 委托生产产品
  • 单位统一订员工餐
  • 固定资产的核算包括
  • 新建厂房费用如何入账
  • 提高纳税遵从度依靠行政执法还是纳税服务
  • linux rsyslogd
  • windows7自带杀毒软件在哪里
  • 安装完win8后没有无线网络
  • linux系统文件在哪个目录
  • scrtkfg.exe - scrtkfg是什么进程 有什么用
  • javascript详解
  • python编写人工智能
  • rhel7.6安装
  • nodejs esmodule
  • androidcontext传值
  • 借助FileReader实现将文件编码为Base64后通过AJAX上传
  • javascript playground
  • android 自定义
  • jQuery UI Bootstrap是什么?
  • 停车定额费发票还能用吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设