type
status
date
slug
summary
tags
category
icon
password
v-model在组件上可以实现双向绑定
首先让我们回忆一下v-model在原生元素上的用法:
在上面代码的背后,模板编译器会对v-model进行更冗长的等价展开。因此上面代码其实等价与下面这段代码:
而当我们将v-model使用在一个组件上时,v-model会被展开为如下形式
<A> 组件内部需要做两件事:
  1. 将内部原生 <input> 元素的 value attribute 绑定到 modelValueprop
  1. 当原生的 input 事件触发时,触发一个携带了新值的 update:modelValue 自定义事件

v-model基础绑定:

  1. 父组件:
引入弹窗子组件A.vue,并在A组件上绑定一个v-model,并将isShow的值传给它
  1. 子组件A.vue:
通过defineProps接收父组件传过来的v-model的值
默认情况下,v-model在组件上都是使用modelValue作为属性 ,接收的值也就是父组件里isShow的值
配合defineEmits,触发close关闭弹窗事件,并将父组件里isShow的值修改为false
默认情况下,v-model在组件里都是使用update:modelValue作为对应的事件

多个v-model绑定

我们可以给v-model指定参数来更改名字,从而可以在一个组件上创建多个v-model双向绑定。
组件上的每一个v-model都会同步不同的prop
  1. 父组件:
  1. 子组件:注意 prop 从原来默认的 modelValue 变为了传入的参数名,对应的事件也变成了 update:参数名

自定义修饰符

在学习输入绑定时,我们知道了 v-model 有一些内置修饰符,例如 .trim.number .lazy。在某些场景下,可能想要一个自定义组件的 v-model 支持自定义的修饰符
  1. 我们来创建一个自定义的修饰符 capitalize
  1. A组件的 v-model 上所添加的修饰符,可以通过 modelModifiers prop 在组件内访问到。在下面的组件中,我们声明了 modelModifiers 这个 prop,它的默认值是一个空对象:
打印一下组件的 modelModifiers prop 包含了 capitalize, 且其值为 true,就表示它在模板中的 v-model 绑定 v-model.capitalize="myText" 上被使用了。
我们可以用判断props.modelModifiers.capitalize的值,来进行一些其他操作

案例代码演示

父组件:
子组件:
学习Vue3第二十一节:Mitt学习Vue3第二十节:依赖注入Provide/Inject
衔蝉
衔蝉
一个普通的干饭人🍚
公告
type
status
date
slug
summary
tags
category
icon
password
欢迎来到衔蝉的博客小站✨
这里是我的个人学习、生活记录
--- 免责声明 ---
⚠️ 本站内容仅代表个人观点
⚠️ 本站内容仅供学习参考使用
--- 关于我 ---
我要如加菲猫一般地活着
一大碗杂碎面
就能换来一个艳阳天🌻