vue3修饰符用法

目录

一、事件修饰符

1、.stop(阻止事件冒泡)

 2、.prevent(阻止事件的默认行为)

3、.capture(使用事件捕获模式)

4、.self(只当事件在该元素本身(而不是子元素)触发时触发回调函数)

5、.once(只触发一次回调函数)

二、按键修饰符

1、.enter(按下回车键时触发)

2、.tab(按下tab键时触发)

 3、.delete(按下删除或退格键时触发)

4、.esc(按下ESC键时触发)

5、.space(按下空格键时触发)

6、.up(按下上箭头键时触发)/.down(按下下箭头键时触发)/.left(按下左箭头键时触发)/.right(按下右箭头键时触发)

三、表单输入修饰符

1、.lazy(用于将输入事件延迟到change事件之后触发)

2、.number(自动将输入值转为数字类型)

3、.trim(自动去除输入值两端的空白字符)

四、鼠标修饰符

1、.left(只在鼠标左键点击时触发)/.right(只在鼠标右键点击时触发)/.middle(只在鼠标中键点击时触发)

2、.passive(指定事件监听器为被动模式,可以提升滚动性能)


一、事件修饰符

1、.stop(阻止事件冒泡)

修饰符.stop是用于阻止事件冒泡的。当一个具有.stop修饰符的事件监听器被触发时,该事件将不再向上冒泡到父元素。这意味着如果一个父元素和子元素都有相同类型的事件监听器,并且点击了子元素,那么只会触发子元素的事件监听器,父元素的事件监听器将被忽略。

// 这里点击只会触发handleClick1
<script setup lang="ts">

const handleClick1 = () => {
  console.log('Button clicked1')
}

const handleClick2 = () => {
  console.log('Button clicked2')
}
</script>

<template>
  <div @click="handleClick2">
    <button @click.stop="handleClick1">Click me</button>
  </div>
</template>

 2、.prevent(阻止事件的默认行为)

修饰符.prevent用于事件处理函数中,阻止事件的默认行为。当事件触发时,浏览器会执行默认的操作,例如提交表单、打开链接等。而使用.prevent修饰符可以阻止这些默认的行为。

使用.prevent修饰符的方式是在事件处理函数的名称后面加上.prevent,例如:

<button @click.prevent="submitForm">提交表单</button>

在上述的代码中,当按钮被点击时,submitForm函数会被调用,同时会阻止表单的默认提交行为。

3、.capture(使用事件捕获模式)

修饰符.capture用于监听一个元素的捕获阶段事件。可以让一个元素的事件在捕获阶段触发

//会执行且优先执行handleClick2,即使子元素加了.stop修饰符,因为handleClick2在捕获阶段就执行了
<script setup lang="ts">
const handleClick1 = () => {
  console.log('Button clicked1')
}

const handleClick2 = () => {
  console.log('Button clicked2')
}
</script>

<template>
  <div @click.capture="handleClick2">
    <button @click.stop="handleClick1">Click me</button>
  </div>
</template>

 .capture修饰符在某些特定的场景下非常有用,可以帮助我们更好地控制事件的触发顺序和处理逻辑。

4、.self(只当事件在该元素本身(而不是子元素)触发时触发回调函数)

修饰符 .self用于限制事件只能在触发事件的元素本身上触发,而不是在子元素上触发。这意味着只有当事件直接在绑定事件的元素上触发时,才会执行事件处理函数。

例如,我们有一个父元素和一个子元素,父元素绑定了一个点击事件,子元素是父元素的一个子元素。使用 .self 修饰符可以确保点击子元素时不会触发父元素的点击事件,只有当点击父元素本身时才会触发。 

// 点击子元素<div>Click Me</div>并不会触发handleClick
<template>
  <div @click.self="handleClick">
    <div>Click Me</div>
  </div>
</template>

5、.once(只触发一次回调函数)

修饰符.once用于绑定一个只能触发一次的事件监听器。

<button @click.once="onClick">Click me</button>

 在上面的例子中,当按钮被点击时,onClick方法只会执行一次,之后再点击按钮将不再触发该方法。这就是.once修饰符的作用。

二、按键修饰符

1、.enter(按下回车键时触发)

修饰符.enter 用于在按下回车键时触发事件。

<script setup lang="ts">
import { ref } from 'vue'

let input1 = ref(null)
let input2 = ref(null)

const onEnter = (event: any) => {
  if (event.target === input1.value) {
    // 当按下 enter 键时,焦点从 input1 切换到 input2
    input2.value.focus()
  } else if (event.target === input2.value) {
    console.log(222, input1.value)

    // 当按下 enter 键时,焦点从 input2 切换到 input1
    input1.value.focus()
  }
}
</script>

<template>
  <input ref="input1" v-on:keydown.enter="onEnter" /><br />
  <input ref="input2" v-on:keydown.enter="onEnter" />
</template>

 上述代码中,v-on:keyup.enter 表示当用户在输入框中按下回车键时,会触发 onEnter方法。

2、.tab(按下tab键时触发)

修饰符 .tab 可以让 组件在用户按下 Tab键时触发相应的事件处理函数。这在处理键盘导航或者表单中的焦点切换时非常有用。

<input ref="input1" v-on:keydown.tab="onTab">

 3、.delete(按下删除或退格键时触发)

.delete修饰符监听删除或退格键的按下事件。

<div @keydown.delete="deleteItem">Delete an item</div>

 我们在<div>元素上使用了@keydown.delete事件监听器,它会在按下删除或退格键时触发deleteItem方法。在deleteItem方法中,你可以执行你想要的删除操作。

4、.esc(按下ESC键时触发)

.esc按键修饰符来监听Esc键的按下事件。

<input type="text" @keydown.esc="handleEscKey" />

 在上面的例子中,当用户在<input>输入框中按下Esc键时,会调用handleEscKey方法来处理按键事件。你可以在该方法中添加你想执行的逻辑。

5、.space(按下空格键时触发)

.space是一个按键修饰符,用于检测空格键的按下事件。可以用于监听按钮的按下事件,并在特定场景下执行相应的操作。

<button @keydown.space="handleSpace">按下空格键</button>

 在上面的示例中,当用户按下空格键时,handleSpace方法会被调用

6、.up(按下上箭头键时触发)/.down(按下下箭头键时触发)/.left(按下左箭头键时触发)/.right(按下右箭头键时触发)

<div @keydown.up="handleUpArrow"></div>
<div @keydown.down="handleDownArrow"></div>
<div @keydown.left="handleLeftArrow"></div>
<div @keydown.right="handleRightArrow"></div>

分别按下上下左右键触发

三、表单输入修饰符

1、.lazy(用于将输入事件延迟到change事件之后触发)

表单输入修饰符.lazy用于将输入事件延迟到change事件之后触发,而不是在每次输入时触发。这可以减少不必要的输入事件触发次数,提升性能。

<input v-model.lazy="message" />

 在上述示例中,v-model.lazy绑定了message数据,并且在每次输入时不会立即更新message的值,而是在change事件触发时更新。这意味着用户需要离开输入框或者按下回车键才会触发数据的更新。

2、.number(自动将输入值转为数字类型)

.number修饰符来将表单输入的值转换为数字类型。

<input v-model.number="myNumber" type="text">

 在上述示例中,通过v-model.number指令绑定一个数据属性myNumber来实现双向绑定。当用户在输入框中输入一个字符串时,Vue会自动将其转换为数字类型,并将结果保存在myNumber属性中。

3、.trim(自动去除输入值两端的空白字符)

.trim修饰符来去除表单输入框中的前导和尾随空格。这个修饰符可以与v-model指令一起使用,以确保用户输入的值不包含空格。 

<input v-model.trim="text" type="text" placeholder="请输入文本" />

现在,无论用户在输入框中输入的值是否包含空格,text的值都将自动去除前导和尾随空格。

请注意,.trim修饰符只能应用于v-model指令,它不适用于其他指令或绑定。

四、鼠标修饰符

1、.left(只在鼠标左键点击时触发)/.right(只在鼠标右键点击时触发)/.middle(只在鼠标中键点击时触发)

<button v-on:click.left="handleLeftClick">左键点击</button>
<button v-on:click.right="handleRightClick">右键点击</button>
<button v-on:click.middle="handleMiddleClick">中键点击</button>

2、.passive(指定事件监听器为被动模式,可以提升滚动性能)

鼠标修饰符中的passive修饰符用于改善页面的滚动性能。传统上,当一个滚动事件被触发时,浏览器将等待所有的事件处理程序完成后再执行滚动操作。但是,使用passive修饰符可以告诉浏览器,事件处理程序不会调用preventDefault()来阻止滚动行为,从而使得浏览器可以在滚动操作即将发生时立即进行滚动处理,提高滚动的流畅度和响应性能。

<div @scroll.passive="handleScroll">Scrollable content</div>

 在上述示例中,当div元素发生滚动事件时,会调用handleScroll方法。并且使用了passive修饰符,告诉浏览器该事件处理程序不会阻止滚动行为。

<think>嗯,用户想了解Vue3中的修饰符类型和用法。首先,我得回忆一下Vue3的文档,特别是事件修饰符和按键修饰符的部分。Vue3在这部分应该和Vue2类似,但可能有些新增或改动。 首先,事件修饰符,比如.stop、.prevent、.capture这些基础的是肯定有的。需要确认一下是否有新增的修饰符,比如.once在Vue3中是否仍然有效。另外,Vue3中可能对按键修饰符的写法做了调整,比如不再推荐使用数字键码,而是用具体的按键名称,比如.enter代替.keyCode=13。 然后,模型修饰符,比如.lazy、.trim、.number,这些应该还是存在的。可能需要检查是否有新的模型修饰符加入,比如Vue3是否引入了自定义模型修饰符的功能。 还有,之前Vue2中的.sync修饰符Vue3中被v-model替代了,但可能需要提到这一点,说明变化。另外,关于自定义修饰符,用户可能需要知道如何通过组件参数来定义自己的修饰符。 接下来要考虑用户可能的使用场景。比如,在处理表单输入时,.trim和.number会很有用。在事件处理中,阻止默认行为或停止冒泡是常见需求,所以需要详细说明这些修饰符的应用示例。 另外,用户提供的引用中提到了.camel修饰符,这在Vue3中可能仍然有效,用于处理属性名的大小写转换,尤其是在使用DOM模板时。需要确认这一点是否正确,并给出示例。 还需要注意Vue3中的一些变化,比如v-model的语法变化,现在支持多个v-model绑定,这可能涉及到修饰符的使用方式是否有调整。例如,在自定义组件中使用v-model时,如何传递修饰符。 最后,整理出修饰符的分类,如事件修饰符、按键修饰符、鼠标修饰符、模型修饰符、特殊修饰符,并给出每个类别的具体修饰符及其用法示例。确保示例代码正确,符合Vue3的语法,比如使用Composition API或setup语法时的写法是否不同。 可能还需要回答用户潜在的问题,比如修饰符的执行顺序,多个修饰符如何一起使用,以及如何自定义修饰符。这些内容需要简明扼要地涵盖在回答中,帮助用户全面理解Vue3修饰符的应用。</think>### Vue3 修饰符使用方法及类型详解 Vue3 修饰符是用于**增强事件处理、表单绑定或自定义组件逻辑**的特殊后缀,分为以下类型及用法: --- #### 一、事件修饰符(控制事件触发逻辑) 1. **基础修饰符** - `.stop`:阻止事件冒泡 ```html <button @click.stop="handleClick">点击不会冒泡</button> ``` - `.prevent`:阻止默认行为 ```html <form @submit.prevent="onSubmit">阻止表单提交刷新页面</form> ``` - `.capture`:使用捕获模式 - `.self`:仅当事件源是元素自身时触发 - `.once`:事件仅触发一次[^4] ```html <button @click.once="initData">初始化仅执行一次</button> ``` 2. **按键修饰符** - 直接使用按键名: ```html <input @keyup.enter="submitForm" /> <!-- 回车触发 --> <input @keyup.ctrl.a="selectAll" /> <!-- Ctrl+A 触发 --> ``` - 支持组合键:`.ctrl`、`.alt`、`.shift`、`.meta` 3. **鼠标修饰符** - `.left`、`.right`、`.middle`:指定鼠标按键触发 ```html <div @click.right="showContextMenu">右键点击菜单</div> ``` --- #### 二、模型修饰符(优化 `v-model` 行为) 1. **基础修饰符** - `.lazy`:输入完成(失焦)后更新数据[^2] ```html <input v-model.lazy="message" /> ``` - `.number`:将输入转为数值类型 - `.trim`:自动去除首尾空格 2. **自定义组件修饰符** 在自定义组件中可通过 `modelModifiers` 接收修饰符: ```javascript app.component(&#39;MyInput&#39;, { props: { modelValue: String, modelModifiers: { default: () => ({}) } }, created() { if (this.modelModifiers.capitalize) { // 处理大写逻辑 } } }) ``` --- #### 三、特殊修饰符 1. **`.camel`** 将短横线属性名转为驼峰命名(用于非字符串模板)[^3]: ```html <svg :view-box.camel="viewBox"></svg> ``` 2. **`.native` 的替代方案** Vue3 中移除了 `.native`,需通过 `emits` 显式声明事件: ```javascript <my-component @click="handleNativeClick" /> ``` --- #### 四、修饰符执行顺序 多个修饰符按**从左到右**顺序生效: ```html <form @submit.prevent.self></form> <!-- 先阻止默认,再判断事件源 --> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值