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

  • 电商网站推广应注重“网站形象”(电商平台的推广)

    电商网站推广应注重“网站形象”(电商平台的推广)

  • 网页无法访问(网页无法访问如何解决手机)

    网页无法访问(网页无法访问如何解决手机)

  • 怎么拆耳机(怎么拆耳机套)

    怎么拆耳机(怎么拆耳机套)

  • 打印机都可以连接手机吗(打印机都可以连无线吗?)

    打印机都可以连接手机吗(打印机都可以连无线吗?)

  • qq互看什么意思(qq互看真的假的)

    qq互看什么意思(qq互看真的假的)

  • 抖音显示关注太快休息一下怎么回事(抖音怎么刷关注)

    抖音显示关注太快休息一下怎么回事(抖音怎么刷关注)

  • 华为荣耀如何分屏操作方法(华为荣耀如何分屏俩个游戏界面)

    华为荣耀如何分屏操作方法(华为荣耀如何分屏俩个游戏界面)

  • 手机qq怎么自创表情(qq怎么自制)

    手机qq怎么自创表情(qq怎么自制)

  • 计算器左上角f怎么取消(计算器左上角f什么意思)

    计算器左上角f怎么取消(计算器左上角f什么意思)

  • 手机关机qq自动回复还有吗(手机关机qq自动回复吗)

    手机关机qq自动回复还有吗(手机关机qq自动回复吗)

  • 苹果关机键没反应(苹果关机键没反应怎么截屏)

    苹果关机键没反应(苹果关机键没反应怎么截屏)

  • 快手购物车在哪里找到(快手购物车在哪里打开)

    快手购物车在哪里找到(快手购物车在哪里打开)

  • 计算机中应用最普遍的字符编码是什么(计算机中应用最普遍的英文字符编码是)

    计算机中应用最普遍的字符编码是什么(计算机中应用最普遍的英文字符编码是)

  • iqoo手机有什么缺点(iQOO手机有什么模式)

    iqoo手机有什么缺点(iQOO手机有什么模式)

  • 快手b类封号影响上热门吗(快手违规b类禁封一天然后就降权了多久账号恢复呢)

    快手b类封号影响上热门吗(快手违规b类禁封一天然后就降权了多久账号恢复呢)

  • 如何查看别人微信置顶(如何查看别人微信绑定的手机号)

    如何查看别人微信置顶(如何查看别人微信绑定的手机号)

  • 小米手机msa能卸载么(miui msa卸载)

    小米手机msa能卸载么(miui msa卸载)

  • 苹果a11支持5g吗(苹果a11还能用吗)

    苹果a11支持5g吗(苹果a11还能用吗)

  • b612没保存怎么找回(b612没保存的视频还能找回吗)

    b612没保存怎么找回(b612没保存的视频还能找回吗)

  • 怎么开启QQ摇动截屏功能(qq摇人)

    怎么开启QQ摇动截屏功能(qq摇人)

  • 微信如何20人同时语音

    微信如何20人同时语音

  • 已保存加密不可上网什么意思(已保存加密不可上网是被加黑了吗)

    已保存加密不可上网什么意思(已保存加密不可上网是被加黑了吗)

  • 抖音怎么截图当壁纸(抖音截图怎么弄)

    抖音怎么截图当壁纸(抖音截图怎么弄)

  • python带你采集桌游、剧本杀游戏店数据信息~(python 数据采集卡)

    python带你采集桌游、剧本杀游戏店数据信息~(python 数据采集卡)

  • 企业所得税是含税价还是不含税价
  • 税务中的三费是指什么
  • 收据收到写什么
  • 小规模入账的收入分录
  • 公司收到劳务发票
  • 餐饮服务属于什么票据类型
  • 摊销保险费会计分录怎么写
  • 高工资怎么说
  • 物业做账的时候怎么做
  • 广告制作费可以计入印刷费吗
  • 合伙企业交个税例题
  • 小微企业月销售额不超过15万
  • 预付款发票可以入费用吗
  • 人机料法环是什么方法
  • 电商无发票成本怎么做账
  • 企业生产经营模式
  • 自己盖厂房
  • 加计抵减申报表填写视频
  • 小规纳税人租金可以记入成本吗
  • 个税起征点是
  • 收到发票对方已红冲是否退回?
  • 合并报表中营业利润不等于
  • 鸿蒙系统怎么同步数据
  • 公司收到加盟费怎么做会计分录
  • 苹果手机怎么刷机
  • 在win7系统中将打开窗口拖到屏幕顶端
  • php 正则表达式
  • 细说php
  • 开机要按f1才能进系统
  • PHP:preg_quote()的用法_PCRE正则函数
  • 物业收取停车费归谁所有
  • 直接将word转化为ppt
  • opencv canny
  • 使用php进行mysql数据库编程的基本步骤
  • react_router
  • spring bootcsdn
  • 基于51单片机的电子秤设计
  • 黄金零售环节增值税的缴纳
  • 前端权限控制实战
  • ip6tables-restore命令 还原ip6tables表
  • php面试题目100及最佳答案
  • 深究Python中的asyncio库-shield函数
  • 企业所得税申报更正怎么操作
  • 基本户发工资的规定
  • 购买汽车相关费用标准
  • 将织梦dedecms转换到wordpress
  • 建筑设备租赁如何交税
  • 事业单位成本核算具体指引—公立医院
  • 哪些固定资产不会贬值
  • 营业总收入同比增长怎么分析
  • 小规模未开票收入按1%还是3%
  • 公对公退款是不是很麻烦
  • 电子承兑到期怎么收款
  • 上年结转会计分录
  • 划转税务的非税收入包括
  • 什么时候确认应收
  • 去银行提备用金需要什么
  • 待处理财产损益是备抵类科目吗
  • 建账前应考虑什么问题
  • sql数据库分布式部署
  • xp系统安装惠普1010教程
  • badcommandorfilename是什么意思
  • 系统更新到win11后还可以调回win10吗
  • win10预览体验推荐哪个通道
  • glsl 函数
  • javascript动画教程
  • vim多行匹配
  • gpio接口
  • cocos2dx4.0入门
  • 如何输出反序数
  • 套接字java
  • unity c+
  • jquery 插件写法
  • jquery mobile 图片滑动
  • 全国低保查询系统网站
  • 广西发票查询平台
  • 深圳地税电子税务局
  • 深圳地方税务局电话
  • 安庆税务局窗口电话
  • 杭州国税电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设