vue3修饰符大全

修饰符

在vue.js中,修饰符是一种特殊的语法,处理了许多DOM事件中的细节,使其无需花费大量时间处理这些问题,且使代码更加简洁和易读。常见的修饰符有五类:

  • 表单修饰符
  • 事件修饰符
  • 鼠标按键修饰符
  • 键值修饰符

1、表单修饰符
表单修饰符是用于处理表单输入的一种特殊语法。它们允许你在模板中直接修改表单元素的值或行为,而无需在组件的逻辑代码中手动处理。Vue 3 中的表单修饰符主要用于 v-model 指令,以便在用户输入时提供额外的控制或转换。

  • .lazy:将input框中的v-model转变为懒加载。默认情况下,v-model 在每次输入事件触发时都会更新数据。使用 .lazy 修饰符后,数据只会在 change 事件触发时更新。
<input type="text" v-model="value"> //实时更新value值
<input type="text" v-model.lazy="value">  //失去焦点后更新value值
<span>{{ value }}</span>
  • .number:自动将用户的输入值转换为 Number 类型。
<input v-model.number="value"> //输入32.5gbs111 ——> 结果32.5
<span>{{ value }}</span>
  • .trim:自动去除用户输入值首尾的空白字符。
<input v-model.trim="value"> //输入 trim  ——> 结果trim

使用表单修饰符时,你可以将它们单独使用,也可以组合使用。例如,你可以同时使用 .lazy 和 .number 修饰符:

//value 只有在用户停止输入(即 change 事件触发时)才会更新,并且它会被自动转换为 Number 类型。
<input v-model.lazy.number="value" type="number">

注意:表单修饰符只影响 v-model 的行为,它们不会改变实际的 DOM 事件监听。例如,使用 .trim 修饰符并不会阻止 input 事件触发,它只是改变了赋值给 v-model 绑定的数据的方式。
此外,Vue 3 还提供了一个 .sync 修饰符,但它实际上不是一个真正的修饰符,而是一个用于双向绑定父子组件间 props 的语法糖。使用 .sync 可以简化父子组件之间的数据同步,但会增加组件之间的耦合性,不推荐使用。

2、事件修饰符
事件修饰符(Event Modifiers)是 Vue.js 框架中用于调整 DOM 事件行为的一种特殊语法,可直接在监听DOM事件器上添加一些额外的行为,无需编写额外代码。
常用的事件修饰符有 .stop、.prevent、.capture、.self、.once 和 .passive。

  • .stop:阻止事件冒泡。
    这相当于调用 event.stopPropagation(),当事件触发时,它不会向上级 DOM 元素传递。
<div @click="shout(2)">
    <button @click.stop="shout(1)">ok</button>  //stop阻止事件向上级DOM元素传递
</div>
<script>
function shout(val){
	console.log(val)   //输出 1
}
</script>
  • .prevent:阻止事件的默认行为。
    这相当于调用 event.preventDefault(),如它可以阻止表单的自动提交或阻止超链接的默认跳转行为。
//阻止超链接跳转
<a href="https://c.biancheng.net/sitemap/" @click.prevent="handleLinkClick">网站地图</a>
<script>
//此处根据业务需求编写代码逻辑
function handleLinkClick(){
	console.log("点击超链接,不默认跳转了。")
}
</script>
  • .capture:使用事件捕获模式。
    这意味着当事件发生时,使用了 .capture 修饰符的 DOM 元素将首先接收和处理事件,然后再按正常的事件流顺序触发其他元素的事件。
<div @click.capture="shout(2)">
    obj2
    <div @click="shout(3)">
        obj3
        <div @click="shout(4)">
            obj4
        </div>
    </div>
</div>
<script>
//点击"obj4",因使用.capture修饰符将优先处理事件,故先输出2,其后按执行顺利输出
function shout(val){
	console.log(val) //输出结果2 4 3
}
</script>
  • .self:仅当 event.target 是元素本身时才会触发事件处理器。
    这可以防止事件冒泡导致父元素的事件处理函数被意外触发。
//点击"obj3"时触发shout(3),但不触发shout(2)事件。
//点击"obj2"时才会触发shout(2)事件
<div @click.self="shout(2)"> //.self修饰符使点击事件在元素本身obj2时才触发
    obj2
    <div @click="shout(3)">
        obj3
    </div>
</div>

注意:使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。如下情况:
(1)@click.prevent.self 会阻止元素及其子元素的所有点击事件的默认行为;
(2)@click.self.prevent 则只会阻止对元素本身的点击事件的默认行为。

  • .once:事件将只会触发一次。
    这对于按钮点击等只需要执行一次操作的场景很有用。
//点击一次后,不会再触发事件
<div @click.once="shout(2)">
    obj2
</div>
  • .passive:监听移动端元素滚动事件,相当于在onscroll事件上加.lazy修饰符。
<!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 -->
<!-- 而不会等待 `onScroll` 完成  -->
<!-- 这其中包含 `event.preventDefault()` 的情况 -->
<div :scroll.passive="onScroll"></div>

3、鼠标按键修饰符
允许仅当特定鼠标按钮被点击时才触发事件处理函数,提供了以下三种鼠标修饰符:

  • .left:仅当鼠标左键被点击时触发。
  • .right:仅当鼠标右键被点击时触发。
  • .middle:仅当鼠标中键(滚轮按钮)被点击时触发。

这些修饰符可以附加到任何鼠标事件监听器上,例如 click、dblclick、mousedown、mouseup 等。

<template>  
  <div>  
    <button @click.left="handleLeftClick">左键点击</button>  
    <button @click.right="handleRightClick">右键点击</button>  
    <button @click.middle="handleMiddleClick">中键点击</button>  
  </div>  
</template>  
<script>  
export default {  
  methods: {  
    handleLeftClick() {  
      console.log('鼠标左键被点击了');  
    },  
    handleRightClick() {  
      console.log('鼠标右键被点击了');  
    },  
    handleMiddleClick() {  
      console.log('鼠标中键被点击了');  
    }  
  }  
};  
</script>

注意:不是所有的鼠标事件都支持所有的鼠标按钮修饰符。通常,click 和 dblclick 事件只响应左键点击,而 mousedown 和 mouseup 事件则可以响应所有鼠标按钮的点击。因此,在需要响应特定鼠标按钮的点击时,你可能需要使用 mousedown 或 mouseup 事件而不是 click 事件。

4、键值修饰符
在监听键盘事件时允许仅当按下特定的键时才触发事件处理函数,Vue 提供了一些常用的键值修饰符,例如.enter、.esc、.ctrl、.shift、.command、.space等。

<el-input type="text" v-model="text" @keyup.enter="handleEnter" placeholder="按下enter键" />
<el-input type="text" v-model="text" @keydown.esc="handleEsc" placeholder="按下esc键" />
  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值