1.1 vue 3 的v-model使用原理:

<child-comp v-model="msg" /> //可翻译为
<child-comp :modelValue="msg" @update:modelValue="msg=$event" /> 

单个数据双向绑定完整示例

//父组件代码
<child-comp v-model="name" />子组件代码:
<template><input type="text" v-model="newValue">
</template><script>
export default {props:{modelValue:{type:String,default:''}},computed:{newValue:{get:function(){return this.modelValue},set:function(value){this.$emit('update:modelValue',value)}}}
}
</script>

vue3 使用特定的 modelValue ,避免 value 的占用,通过 update:modelValue 实现数据双向绑定。值得注意的是,vue3 移除了 model 选项。

1.2、多个 v-model 使用

在 vue3 一个组件可以使用多个 v-model ,统一了 vue2 的 v-model 和 .sync 修饰符。

使用原理:

<child-comp v-model:name="name" v-model:age="age" /> //可翻译为
<child-comp :name="name" @update:name="name=$event":age="age" @update:age="age=$event" /> 

实现多个数据双向绑定完整实例:

//父组件代码
<child-comp v-model:name="name" v-model:age="age" /> //子组件代码
<template><div><input type="text" v-model="newName"><input type="text" v-model="newAge"></div>
</template>
<script>
export default {props:{name:{type:String,default:''},age:{type:String,default:""}},emits:['update:name','update:age'],computed:{newName:{get:function(){return this.name},set:function(value){this.$emit('update:name',value)}},newAge:{get:function(){return this.age},set:function(value){this.$emit('update:age',value)}}}
}
</script>  

需要注意的是 script 中多了一个 emits 选项,你发现了吗?

vue3 组件的自定义事件需要定义在 emits 选项中,只要是自定义事件,就需要添加在 emits 中,否则会有警告。它的优点:

  1. 如果与原生事件相同名时,事件就会被触发两次,如果在 emits 选项中加入时,当作自定义事件处理,只会触发一次。
  2. 更好地指示组件的工作方式。
  3. 可以校验对象形式的事件。

作者:前端人_倩倩
链接:https://juejin.cn/post/7025773427260653599
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Vue3双向绑定的坑 坑死人了相关推荐

  1. vue双向绑定是如何实现的

    双向绑定 Vue 的双向绑定是通过数据劫持和发布-订阅模式实现的. 当 Vue 实例初始化时,它会对 data 选项中的每个属性使用 Object.defineProperty()方法进行数据劫持.这 ...

  2. vue组件双向绑定.sync修饰符的一个坑

    我们知道组件是单项的,但是有时候需要双向,这时候我们可以使用.sync修饰符,但今天遇到一个坑,一直不成功,花了半小时试出来的.... 在编程的时候我们很习惯冒号后面跟着空格.而.sync双向绑定需要 ...

  3. VUE 入坑系列 一 双向绑定

    html代码 <div id="app"><p>{{message}}</p><span>message1</span> ...

  4. 数据双向绑定_手写 Vue3 数据双向绑定 理解Proxy

    前言 vue3的 Proxy 最近貌似各大网红公众号都有发,我也来蹭蹭热度写一篇吧!我们也可以结合vue2来看看vue3到底发生了些什么变化,又解决了Vue2.x的哪些痛点.接下来我们一起看看~ 目录 ...

  5. vue2.0,vue3.0 v-model数据双向绑定

    vue2.0,vue3.0 v-model数据双向绑定 vue.2.0 vue2.0 vue-property-decorator vue3.0 vue.2.0 <base-checkbox v ...

  6. Vue基础——VueJS是什么、Vue的优缺点、vue2和vue3的模板区别、MVVM数据双向绑定、Vue的安装和使用、Vue模板语法-文本渲染、常用的vue的指令

    目录 一.VueJS是什么? 二.Vue的优缺点 三.MVVM 数据双向绑定 四.Vue的安装和使用 五.Vue模板语法-文本渲染 六.常用的vue的指令 一.VueJS是什么? 它是一个轻量级MVV ...

  7. 02.Vue3 基础语法:常用语法、列表渲染、事件绑定和表单双向绑定

    Vue3 基础语法 1. Vue 中应用和组件的基础概念 createApp createApp 表示创建一个 Vue 应用,存储在 app 变量中. 传入的参数表示,这个应用最外层的组件,应该如何展 ...

  8. vue3 antd项目实战——Form表单的提交与校验【v-model双向绑定input输入框、form表单数据,动态校验规则】

    vue3 ant design vue项目实战--Form表单[v-model双向绑定数据实现form表单数据的提交] 上期文章回顾[UI界面渲染] 场景复现(源代码附在文章最后) 实现需求 1.表单 ...

  9. Vue数据双向绑定原理(vue2向vue3的过渡)

    众所周知,Vue的两大重要概念: 数据驱动 组件系统 接下来我们浅析数据双向绑定的原理 一.vue2 1.认识defineProperty vue2中的双向绑定是基于defineProperty的ge ...

最新文章

  1. java 1099_【LeetCode(Java) - 1099】小于 K 的两数之和
  2. Java自带的广告怎么删掉_如何屏蔽电脑上的弹窗广告?
  3. 甲骨文正式发布Java 14(Oracle JDK 14)
  4. mysql主库宕机能写吗_MYSQL主主切换(主库宕机)_MySQL
  5. php青茶什么时候拆,青茶的香味应该如何评判(天赐露)
  6. Java类类的getDeclaringClass()方法和示例
  7. java nlpir_中科院NLPIR中文分词java版
  8. [BZOJ3211] 花神游历各国 - 线段树
  9. eclipse 编码设置之BOM丢失
  10. mybatis 三级缓存查询循序_MyBatis手把手跟我做系列(五) --- 一级缓存与二级缓存
  11. 微信回应朋友圈表情包评论关闭:灰度测试;Twitter漏洞波及1700万用户;Ruby 2.7.0发布 | 极客头条...
  12. 崩坏3区号+86_今天才知道手机号前的+86是这个意思
  13. 浏览器窗口通信的多种方式
  14. 虚拟机中Ubuntu安装中文输入法(谷歌输入法)
  15. 2022年湖北省住建厅特种作业操作证怎么报考?甘建二
  16. ps -ef|grep 命令解释
  17. esp8266基本使用 - WebServer
  18. 基于Redis的限流器的实现
  19. JAVA计算:用 100 元钱买 100 支笔,其中钢笔 3 元 / 支,圆珠笔 2 元 / 支,铅笔 0.5 元 / 支,问钢笔、圆珠笔和铅笔可以各买多少支 ?
  20. python对excel进行读写操作

热门文章

  1. 关于虚幻4引擎D3D导致频繁崩溃的保守解决方案
  2. 数据结构---与树相关的知识
  3. 微信智能对话机器人调用第三方云函数
  4. ArcGIS Engine开发学习(2)控件的使用案例
  5. VS Code权威指南目录
  6. 向上取整函数:ceil
  7. deepin卸载了python_deepin官方论坛-深度科技官网旗下网站
  8. wxid加好友 wxid转微信号
  9. RISC-V学习笔记(2)
  10. canvas清除画布方法