位置: IT常识 - 正文

【Vue2从入门到精通】详解Vue数据双向绑定原理及手动实现双向绑定(vue2-elm)

编辑:rootadmin
【Vue2从入门到精通】详解Vue数据双向绑定原理及手动实现双向绑定 文章目录✨什么是数据双向绑定✨数据双向绑定的原理✨Vue数据双向绑定原理✨实现数据双向绑定的步骤✨手动实现自定义组件的双向绑定的步骤✨写在最后

推荐整理分享【Vue2从入门到精通】详解Vue数据双向绑定原理及手动实现双向绑定(vue2-elm),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue2教程,vue 入门,vue2-elm,vue2-elm,vue2.0教程,vue2.,vue2教程,vue2-elm,内容如对您有帮助,希望把文章链接给更多的朋友!

✨什么是数据双向绑定

我们先从单向绑定切入单向绑定非常简单,就是把Model绑定到View。

什么是双向绑定呢?当我们用JavaScript代码更新Model时,View就会自动更新,在单向绑定的基础上,用户更新了View,Model的数据也自动被更新了,这种情况就是双向绑定。

✨数据双向绑定的原理

数据双向绑定的原理之前,我们先来了解一下什么是MVVM。

MVVM是一种设计思想,它是Model-View-ViewModel的缩写。它也是MVC的增强版。

Model是代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑。View是代表UI组件,它负责将数据模型转化成UI展现出来。ViewModel是一个同步View和Model的对象。

ViewModel的主要职责:

数据变化后更新视图视图变化后更新数据

当然,它还有两个主要部分组成

监听器(Observer):对所有数据的属性进行监听解析器(Compiler):对每个元素节点的指令进行扫描跟解析,根据指令模板替换数据,以及绑定相应的更新函数✨Vue数据双向绑定原理

Vue是采用数据劫持结合发布者-订阅者模式的方式,通过使用ES5中的Object.defineProperty()方法来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调来渲染视图。

Object.defineProperty()允许在对象上定义新的属性,以及修改或删除现有属性的特性,其中包括get、set、enumerable和configurable等。

【Vue2从入门到精通】详解Vue数据双向绑定原理及手动实现双向绑定(vue2-elm)

✨实现数据双向绑定的步骤创建Vue实例时,在data属性中定义需要双向绑定的数据。在模板中使用v-model指令将输入控件绑定到数据属性上。 在Vue内部,使用Object.defineProperty()方法将数据属性转换为getter/setter形式,从而实现数据的响应式变化。当输入控件的值发生变化时,Vue会自动调用数据属性的setter方法,从而更新数据的值。当数据的值发生变化时,Vue会自动更新相关的DOM元素,从而实现数据与视图的双向绑定。

示例代码如下:

html

<div id="app"> <input v-model="message"> <p>{{ message }}</p></div>

javascript

var vm = new Vue({ el: '#app', data: { message: '' }});

在上面的代码中,v-model指令将输入框和message属性进行了双向绑定。当输入框的值发生变化时,message属性的setter方法会被调用,从而更新数据。当message属性的值发生变化时,相关的DOM元素也会自动更新,从而实现了数据与视图的双向绑定。

需要注意的是,Vue的双向绑定仅适用于一些特定的输入控件,如input、textarea和select等。对于自定义组件,需要手动实现数据的双向绑定。

如何手动实现数据的双向绑定呢?请继续往下看。

✨手动实现自定义组件的双向绑定的步骤在自定义组件中,通过props属性接收父组件传递的数据,并在组件中定义一个内部变量来保存这些数据。在组件内部使用v-model指令将输入控件绑定到内部变量上。在组件内部监听输入控件的变化事件,并在事件处理函数中更新内部变量的值。在组件内部通过$emit()方法触发一个自定义事件,并将内部变量作为参数传递给父组件。在父组件中使用自定义事件的处理函数来更新父组件中的数据。

示例代码如下:

<!-- 父组件 --><template> <div> <my-component v-model="message"></my-component> <p>{{ message }}</p> </div></template><script> import MyComponent from './MyComponent.vue'; export default { components: { 'my-component': MyComponent }, data() { return { message: '' } } }</script><!-- 自定义组件 --><template> <div> <input type="text" v-model="internalValue"> </div><template><script> export default { props: ['value'], data() { return { internalValue: '' } }, mounted() { this.internalValue = this.value; }, watch: { internalValue() { this.$emit('input', this.internalValue); } } }</script>

在上面的代码中,我们定义了一个名为value的props属性来接收父组件传递的数据,同时定义了一个名为internalValue的内部变量来保存这些数据。在组件挂载后,我们将value的值赋值给internalValue。

在组件内部使用v-model指令将输入控件绑定到internalValue上。当输入控件的值发生变化时,我们使用watch来监听internalValue的变化事件,并在事件处理函数中使用$emit()方法触发一个名为input的自定义事件,并将internalValue作为参数传递给父组件。

在父组件中,我们可以通过v-model指令将message属性与自定义组件的value属性进行双向绑定。当自定义组件的input事件被触发时,我们可以在事件处理函数中将事件的参数作为message属性的值进行更新。

示例代码如下:

<!-- 父组件 --><template> <div> <my-component v-model="message"></my-component> <p>{{ message }}</p> </div></template><script> import MyComponent from './MyComponent.vue'; export default { components: { 'my-component': MyComponent }, data() { return { message: '' } } }</script><!-- 自定义组件 --><template> <div> <input type="text" v-model="internalValue"> </div></template><script> export default { props: ['value'], data() { return { internalValue: '' } }, mounted() { this.internalValue = this.value; }, watch: { internalValue() { this.$emit('input', this.internalValue); } } }</script>

在上面的代码中,我们定义了一个名为message的数据属性,并将它与自定义组件的value属性进行了双向绑定。

同时,在自定义组件中,我们实现了数据的双向绑定,并通过$emit()方法触发了一个名为input的自定义事件来与父组件进行通信。这样就实现了自定义组件的双向绑定。

✨写在最后✨ 原创不易,希望各位大佬多多支持。👍 点赞,你的认可是我创作的动力。⭐️ 收藏,感谢你对本文的喜欢。✏️ 评论,你的反馈是我进步的财富。
本文链接地址:https://www.jiuchutong.com/zhishi/300665.html 转载请保留说明!

上一篇:es6新增哪些特性(es6特性及使用场景)

下一篇:jQuery 获取与设置 元素属性【一篇文章轻松拿下】(jquery获取值的几种方法)

  • PPTV网络电视界面乱码怎么办

    PPTV网络电视界面乱码怎么办

  • 网易云别人送的黑胶怎么领(网易云别人送的专辑怎么删除)

    网易云别人送的黑胶怎么领(网易云别人送的专辑怎么删除)

  • 手机号更换实名认证(手机号更换实名认证需要双方都在吗)

    手机号更换实名认证(手机号更换实名认证需要双方都在吗)

  • 天猫精灵待机耗电量吗(天猫精灵待机耗电大吗)

    天猫精灵待机耗电量吗(天猫精灵待机耗电大吗)

  • 100兆宽带配多大路由器(100兆宽带配多大无线路由器)

    100兆宽带配多大路由器(100兆宽带配多大无线路由器)

  • 小米usbc和typec一样吗(小米usb c和type c区别)

    小米usbc和typec一样吗(小米usb c和type c区别)

  • 拼多多没收到货点了确认收货怎么办(拼多多没收到货自动确认了怎么办)

    拼多多没收到货点了确认收货怎么办(拼多多没收到货自动确认了怎么办)

  • 操作系统是计算机系统的一种什么软件

    操作系统是计算机系统的一种什么软件

  • 大数据的价值体现在哪些方面(大数据的价值体现在通过对数据进行评价)

    大数据的价值体现在哪些方面(大数据的价值体现在通过对数据进行评价)

  • 计算机的技术性能指标主要是指什么(计算机的技术性能指标主要是指)

    计算机的技术性能指标主要是指什么(计算机的技术性能指标主要是指)

  • 华为手表怎么添加歌曲(华为手表怎么添加联系人)

    华为手表怎么添加歌曲(华为手表怎么添加联系人)

  • vivo手机怎么一直亮屏(vivo手机怎么一直震动)

    vivo手机怎么一直亮屏(vivo手机怎么一直震动)

  • 华为支付保护怎么关(怎么关华为支付保护功能)

    华为支付保护怎么关(怎么关华为支付保护功能)

  • 如何把软件放入sd卡(如何把软件放入隐私空间)

    如何把软件放入sd卡(如何把软件放入隐私空间)

  • 华为mate30怎么调音量(华为mate30怎么调节音量大小)

    华为mate30怎么调音量(华为mate30怎么调节音量大小)

  • 笔记本能不能加内存条(笔记本能不能加显卡)

    笔记本能不能加内存条(笔记本能不能加显卡)

  • b站音频怎么下载到本地(b站音频怎么下载到电脑)

    b站音频怎么下载到本地(b站音频怎么下载到电脑)

  • iphone11pro长宽(iphone11pro尺寸长宽多少厘米)

    iphone11pro长宽(iphone11pro尺寸长宽多少厘米)

  • reno拍照技巧(opporeno怎么拍照好看)

    reno拍照技巧(opporeno怎么拍照好看)

  • 华为人工智能叫什么(华为人工智能叫什么英文名)

    华为人工智能叫什么(华为人工智能叫什么英文名)

  • 闲鱼怎么和淘宝关联(闲鱼怎么和淘宝绑定账号)

    闲鱼怎么和淘宝关联(闲鱼怎么和淘宝绑定账号)

  • 苹果xs max是双卡吗(苹果xsmax是双卡双待怎么用)

    苹果xs max是双卡吗(苹果xsmax是双卡双待怎么用)

  • pgptray.exe - pgptray是什么进程 有什么用

    pgptray.exe - pgptray是什么进程 有什么用

  • api接口详解大全(看这篇就足以了)(api接口是干嘛的)

    api接口详解大全(看这篇就足以了)(api接口是干嘛的)

  • Cookie 和 Session的区别(Cookie和Session的区别,各自的使用方法及常用操作)

    Cookie 和 Session的区别(Cookie和Session的区别,各自的使用方法及常用操作)

  • 怎么算一般纳税人
  • 什么是销项税额抵减
  • 小规模纳税人缴纳增值税怎么算
  • 印花税科目会计分录
  • 小规模纳税人到底能不能收专票
  • 汇算清缴纳税调整项目
  • 其他应收款科目未经财务会计部门和运行管理部门
  • 成本模式的投资性房地产折旧计入什么
  • 产业扶持资金管理办法
  • 公司成立后有哪些开支
  • 无形资产增值税计入入账价值吗
  • 商业汇票概念股票
  • 学校有没有纳税人识别号
  • 住宿业的配套服务有哪些
  • 应收账款转让的会计处理
  • 分公司税率怎样确定
  • 进项税转出的会计处理
  • 项目资本金入账
  • 所得税申报季末资产总额怎么填
  • 多付几分钱怎么做账
  • 没有金税盘怎么查询已开发票
  • 软件企业即征即退账务处理
  • 企业涉及应付利息的税金
  • 资产减值损失怎么影响利润
  • 主办会计工作注意什么
  • win10清空回收站是灰色的
  • win10远程连接提示身份验证错误
  • windows11如何进入启动设置
  • 固定资产出租需交什么税
  • 销售已使用过的固定资产增值税税率
  • 企业投资入股的几种方式
  • 企业应纳所得税计算公式
  • window7无法正常启动怎么办
  • 公允价值的利弊
  • 好奇地看着我
  • 纳税人辅导期申报流程
  • 好用的5款国产手机推荐
  • 微信支付开发需要什么条件
  • yolo v5训练
  • thinkphp和php
  • jetbrainsnews
  • 技术咨询费属于
  • 企业为什么要开银行承兑汇票
  • 重分类调整分录汇总表什么情况填写
  • 个税申报漏报人怎么办
  • viite
  • mysql左连接查询 效率
  • 织梦标签工具
  • zabbix 网络监控
  • 财务往来账对账总结
  • 当月减少的固定资产为什么计提折旧
  • 行政事业单位非税收入管理办法
  • 税务局返还的个税手续费是否纳税
  • 在贫困户入股分红大会上的讲话
  • 国家高新技术企业补贴
  • 怎么查公司的对公账户
  • 坏账准备转回并收到货款会计分录
  • 买房定金转给销售有效吗
  • 差旅费属于其他费用吗
  • 分公司内部管理模式
  • 生产型企业年终奖发放方案
  • 建账的要点
  • 记一次成功的喜悦作文
  • SQL语句查询数据库账号和权限
  • 网站windows
  • window10 uwp
  • 苹果mac没有声音怎么办
  • centos7查看性能监控
  • js opendialog
  • python怎么用
  • 安卓手机微信取消窗口化
  • nodejs.
  • emacs win10
  • js的文件操作
  • 在androidstudio中,如何改变图片的位置
  • 四川省国税局一处处长
  • 非贸付汇代扣代缴增值税可以抵扣吗
  • 怎么打印电子社保
  • 税控发票开票软件金税盘版发票未报送什么情况?
  • 汽车修理厂24小时修理
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设