Vue3值得注意的新特性之——触发组件选项
事件名
与组件和prop一样,值组件事件名提供了自动的得注大小写转换。如果用驼峰命名的新特性之选项子组件中触发一个事件,你将可以在父组件中添加一个kebabcase(短横线分割命名)的值组件监听器。
<my-component @my-event="doSomething"></my-component> this.$emit(myEvent)与props命名一样,得注当你使用DOM模板时,新特性之选项我们建议使用kebabcase事件监听器。值组件如果你使用的得注是字符串模板,这个限制就不适用。新特性之选项
定义自定义事件
可以通过emits选项在组件上定义已发出的值组件事件。
app.component(custom-form,得注 { emits: [inFocus, submit] })当在emits选项中定义了原生事件(如click)时,将使用组件中的新特性之选项事件替代原生事件侦听器。
验证抛出的值组件事件
与props类型验证类似,如果使用对象语法而不是得注数组语法,则可以验证它。新特性之选项
要添加验证,将为事件分配一个函数,免费源码下载该函数接收传递给$emit调用的参数,并返回一个布尔值以指示事件是否有效。
app.component(custom-form, { emits: { // 没有验证 click: null, // 验证submit 事件 submit: ({ email, password }) => { if (email && password) { return true } else { console.warn(Invalid submit event payload!) return false } } }, methods: { submitForm() { this.$emit(submit, { email, password }) } } })v-model事件
默认情况下,组件上的v-model使用modelValue作为props和update:modelValue做完事件。我们可以通过向v-model传递参数来修改这些名称:
<my-component v-model:title="bookTitle"></my-component>在本例中,子组件将需要一个 title prop 并发出 update:title 要同步的事件:
app.component(my-component, { props: { title: String }, emits: [update:title], template: ` <input type="text" :value="title" @input="$emit(update:title, $event.target.value)"> ` })多个v-model绑定
通过利用特定prop和事件为目标的能力,正如我们之前在v-model参数中所学的那样,我们现在可以在单个组件实例上创建多个v-model绑定。
每个v-model将同步到不同的prop,而不需要在组件中添加额外的选项。
<user-name v-model:first-name="firstName" v-model:last-name="lastName" ></user-name> app.component(user-name, { props: { firstName: String, lastName: String }, emits: [update:firstName, update:lastName], template: ` <input type="text" :value="firstName" @input="$emit(update:firstName, $event.target.value)"> <input type="text" :value="lastName" @input="$emit(update:lastName, $event.target.value)"> ` })处理v-model修饰词
在2.X中,我们对组件v-model上的.trim等修饰符提供了硬编码支持。但是,如果组件可以支持自定义修饰符,则会更有用。服务器租用
在3.X中,添加到组件v-model的修饰符将通过modelModifiers prop提供给组件。
v-model有内置的修饰符——.trim,.number和.lazy。但是,在某些情况下,你可能还需要添加自己的自定义修饰符。
我们做个实例:将提供的字符串第一个字母大写。
<my-component v-model.capitalize="myText"></my-component> app.component(my-component, { props: { modelValue: String, modelModifiers: { default: () => ({}) } }, emits: [update:modelValue], template: ` <input type="text" :value="modelValue" @input="$emit(update:modelValue, $event.target.value)"> `, created() { console.log(this.modelModifiers) // { capitalize: true } } })现在我们已经设置了 prop,我们可以检查 modelModifiers 对象键并编写一个处理器来更改发出的值。在下面的代码中,每当<input/> 元素触发 input 事件时,我们都将字符串大写。
<div id="app"> <my-component v-model.capitalize="myText"></my-component> {{ myText }} </div> const app = Vue.createApp({ data() { return { myText: } } }) app.component(my-component, { props: { modelValue: String, modelModifiers: { default: () => ({}) } }, emits: [update:modelValue], methods: { emitValue(e) { let value = e.target.value if (this.modelModifiers.capitalize) { value = value.charAt(0).toUpperCase() + value.slice(1) } this.$emit(update:modelValue, value) } }, template: `<input type="text" :value="modelValue" @input="emitValue">` }) app.mount(#app)对于带参数的 v-model 绑定,生成的 prop 名称将为 arg + "Modifiers":
<my-component v-model:description.capitalize="myText"></my-component> app.component(my-component, { props: [description, descriptionModifiers], emits: [update:description], template: ` <input type="text" :value="description" @input="$emit(update:description, $event.target.value)"> `, created() { console.log(this.descriptionModifiers) // { capitalize: true } } })相关文章
- 摘要:华帝蒸箱作为一款集高效、智能于一体的烹饪神器,凭借其创新科技和出色性能在市场上备受瞩目。接下来,我们将从多个方面来探秘华帝蒸箱的特点与优势。一、功能齐全,满足多样化需求...2025-11-05
- 摘要:随着科技的不断进步,手机的功能也越来越强大。其中,手机插入U盘可以扩展手机的存储空间,方便用户随时随地传输和保存文件。本文将详细介绍如何使用手机连接U盘,让您能够轻松实现数据的传输...2025-11-05
电脑消除照片上的水印,畅享清晰图像(利用AI技术,快速去除水印,让照片更加美观)
摘要:在日常生活和工作中,我们常常会遇到照片上存在水印的情况,这些水印往往会影响到我们对照片的观赏和使用。但是,随着科技的发展,利用电脑消除照片上的水印已成为可能。本文将介绍一些妙招,利...2025-11-05- 摘要:随着智能手机的普及,游戏成为了人们日常娱乐生活中不可或缺的一部分。而作为一款专为游戏而设计的手机,华为畅想7在游戏性能、操控体验以及视觉效果上都有着出色表现。本文将详细介绍华为畅想...2025-11-05
手机过热的危害及预防方法(手机发热现象背后隐藏的危机与解决之道)
摘要:现代人离不开手机,而手机过热已成为一个普遍的问题。虽然我们享受了手机给我们带来的便利和乐趣,但是我们也应该关注手机过热带来的潜在危害。本文将探讨手机过热的危害以及预防方法,帮助读者...2025-11-05苹果PC安装Win7系统教程(一步步教你如何在苹果电脑上安装Windows7系统)
摘要:在苹果电脑上安装Windows7系统是许多苹果电脑用户的需求之一。本文将为大家详细介绍如何在苹果PC上安装Win7系统的步骤和注意事项,希望对大家有所帮助。一:准备工作...2025-11-05


最新评论