Vue3双向绑定的坑 坑死人了

news/2024/11/23 4:10:19/

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
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


http://www.ppmy.cn/news/67172.html

相关文章

[元带你学NVMe] NVMe 1.4新特性:持久存储区域

声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 内容摘要 前言 企业级NVMe固态硬盘自带有大容量的DRAM缓存,并且处于断电保护设计之下。PMR(Persistent Memory Region)空间提供了一种内存级读写速度、断电后数据…

用于分布式系统的ID?——UUID(Universally Unique Identifier,通用唯一识别码)

用于分布式系统的ID?——UUID&#xff08;Universally Unique Identifier&#xff0c;通用唯一识别码&#xff09; UUID 是 通用唯一识别码&#xff08;Universally Unique Identifier&#xff09;的缩写&#xff0c;是国际标准化组织&#xff08;ISO&#xff09;提出的一个概…

常用端口号/etc/services

/etc/services文件存储的内容。记录一下&#xff0c;防止忘记。 # /etc/services: # $Id: services,v 1.1 2004/10/09 02:49:18 andersen Exp $ # # Network services, Internet style # # Note that it is presently the policy of IANA to assign a single well-known # por…

原型/原型链/构造函数/类

认识构造函数 为什么有构造函数 因为一般的创建对象的方式一次只能创建一个对象, 利用工厂模式创建的对象&#xff0c;对象的类型都是Object类型 什么是构造函数 构造函数也称之为构造器&#xff08;constructor&#xff09;&#xff0c;通常是我们在创建对象时会调用的函数…

C++实现简单工厂和工厂方法以及抽象工厂

工厂类型设计模式 把new给封装起来,即对象的创建封装起来 一种创建型设计模式 简单工厂 假设场景&#xff1a;用工厂来创建不同的汽车 优点&#xff1a;把对象的创建封装在一个接口函数里面&#xff0c;通过传入不同标识来返回不同的对象。客户不用自己负责创建对象(new)&…

【C语言】测试4 循环程序设计

若 x, i, j, k 都是 int 型变量,则计算下面表达式后, x 的值为( )。 x=( i=4 , j=16 , k=32); A. 4 B. 16 C. 32 D. 52 正确答案: C 以下能正确计算123* ⋯ 10 的程序段是( )。 A. do {i=1;s=1; s=si; i++; }while(i<=10); B. do {i=1;s=0; s=si; i++; }w…

【设计模式】模板方法模式--让你的代码更具灵活性与可扩展性

文章目录 前言模板方法模式的定义核心组成模板方法模式与其他设计模式的区别 代码实现抽象类具体类Client 经典类图spring中的例子 总结 前言 在软件开发中&#xff0c;设计模式是一种经过实践检验的、可复用的解决方案&#xff0c;它们可以帮助我们解决某一特定领域的典型问题…

PBDB Data Service:Fossil diversity over time (diagnostic) 化石多样性随时间的变化(诊断)

化石多样性随时间的变化&#xff08;诊断&#xff09; 描述用法参数需要以下参数之一以下参数指定要计数的内容以及时间分辨率以下参数选择要分析的实例 方法响应结果1&#xff1a;basic 格式术语表 描述 此操作提供了一种检查 occs/diversity 操作计数的分类群的方法。可以将…