vue常见修饰后缀

操作事件修饰后缀

<div @click.stop="click"></div><!-- 阻止事件向上冒泡 -->
<div @click.self="click"></div>
<!-- 根据实际操作对象执行函数 -->
<!-- 还记得JQ中 $("div").on(click, "p", function(){}) 吗? 与其差不多, 两者都不向上冒泡也不向下冒泡 -->
<div @click.prevent="click"></div>
<!-- 取消事件的默认动作,相当于加了一行 event.preventDefault()代码 -->
<component @click.native="click"></component>
<!-- 为自定义组件添加原生事件,在根元素上添加.native是无效的 -->
<div @click.once="click"></div>
<!-- 事件将只能执行一次 -->
<input @input.trim="input">
<!-- 去除前后所有的空格,ri顺序不要写错 -->

关于.capture,我在网上找到了一个实例

<div id="d1" @click.capture="click">
	<div id="d2" @click.capture="click">
		<div id="d3" @click="click">
			<div id="d4" @click="click">
				<!-- 点击d4的时候,执行的顺序为d1,d2,d4,d3 -->
				<!-- 由于1,2有修饰符,因此先触发事件,然后就是4本身,最后是冒泡事件的3 -->
			</div>
		</div>
	</div>
</div>

键盘监听修饰后缀

<div @keypress.13="keypress"></div>
<!-- 当'keyCode'是13时执行 -->
<div @keypress.enter="keypress"></div>
<!-- 当按下回车时执行 -->
<div @keypress.tab="keypress"></div>
<!-- 当按下tab时执行 -->
<div @keypress.delete="keypress"></div>
<!-- 捕获 <delete> 和 <backspace> -->
<div @keypress.esc="keypress"></div>
<!-- 当按下esc时执行 -->
<div @keypress.space="keypress"></div>
<!-- 当按下空格时执行 -->
<div @keypress.up="keypress"></div>
<!-- 当按下向上时执行 -->
<div @keypress.down="keypress"></div>
<!-- 当按下向下时执行 -->
<div @keypress.left="keypress"></div>
<!-- 当按下向左时执行 -->
<div @keypress.right="keypress"></div>
<!-- 当按下向右时执行 -->

修饰后缀的混用

修饰后缀可以混用,但是会因顺序的不同产生不同的效果
我在项目中遇到过这个问题,随后在网上找到了一个不错的例子

<div @click="alert(1)">
	<a href="/#" @click.prevent.self="alert(2)">
		<div @click="alert(3)"></div>
	</a>
</div>

?点击div3会alert3,alert1;不但阻止了alert2,还阻止了a的默认跳转.
    因为点击的时候会先prevent, 阻止默认事件,组织了跳转;然后判断是否是self,因为点击到的是div3,不是self,组织了alert2

<div @click="alert(1)">
	<a href="/#" @click.self.prevent="alert(2)">
		<div @click="alert(3)"></div>
	</a>
</div>

?点击div3,会alert3,alert1,跳转到/#.只阻止了alert2
    因为会先判断self,点击到div3,不是self,所以不会执行click事件,就不会阻止默认事件的alert2,所以可以跳转到/#.

<think>我们正在讨论Vue事件修饰符。事件修饰符是Vue为v-on指令提供的特殊后缀,用于处理DOM事件细节。 常用的事件修饰符包括: .stop - 调用 event.stopPropagation(),阻止事件冒泡 .prevent - 调用 event.preventDefault(),阻止默认行为 .capture - 添加事件侦听器时使用 capture 模式(即事件捕获阶段处理) .self - 只当事件是从侦听器绑定的元素本身触发时才触发回调(即事件源是自身才触发) .once - 只触发一次回调 .passive - 以 { passive: true } 模式添加侦听器,提升移动端性能(尤其滚动性能) 此外,还有按键修饰符(如 .enter, .tab, .delete, .esc, .space, .up, .down, .left, .right)和系统修饰键(如 .ctrl, .alt, .shift, .meta)等。 下面我们将详细说明这些事件修饰符的用法和场景。</think>### Vue 常用事件修饰符详解 事件修饰符是 Vue 为 `v-on` 指令提供的特殊后缀,用于简化常见 DOM 事件处理逻辑。以下是核心修饰符及其应用场景: --- #### **基础事件修饰符** 1. **`.stop`** - 阻止事件冒泡 ```html <button @click.stop="handleClick">点击不会向上冒泡</button> ``` 2. **`.prevent`** - 阻止默认行为 ```html <form @submit.prevent="onSubmit">阻止表单默认提交</form> ``` 3. **`.capture`** - 使用捕获模式(从外向内触发) ```html <div @click.capture="outer">外层先触发</div> ``` 4. **`.self`** - 仅当事件源是元素自身时触发(忽略子元素冒泡) ```html <div @click.self="onlySelf">子元素点击不会触发</div> ``` 5. **`.once`** - 事件只触发一次 ```html <button @click.once="oneTime">仅生效一次</button> ``` 6. **`.passive`** - 提升滚动性能(不阻塞主线程) ```html <div @scroll.passive="onScroll">移动端优化</div> ``` --- #### **按键修饰符** 7. **系统按键** ```html <!-- 组合键 --> <input @keyup.ctrl.enter="submit"> <!-- 精确按键 --> <input @keyup.exact.esc="close"> ``` 8. **常用按键别名** | 修饰符 | 对应按键 | |--------------|----------------------| | `.enter` | Enter 回车键 | | `.tab` | Tab 键 | | `.delete` | Delete / Backspace | | `.esc` | Esc 键 | | `.space` | 空格键 | | `.up`/`.down`| 上下方向键 | --- #### **鼠标修饰符** 9. **鼠标按键限定** ```html <div @click.middle="middleClick">中键点击</div> <div @click.right.prevent>禁用右键菜单</div> <!-- 其他:.left, .right, .middle --> ``` --- ### 修饰符链式调用 可串联使用多个修饰符: ```html <!-- 阻止冒泡 + 阻止默认行为 + 只触发一次 --> <a @click.stop.prevent.once="doSomething">链接</a> ``` --- ### 性能与场景对比 | 修饰符 | 典型场景 | 注意事项 | |--------------|--------------------------|--------------------------| | `.passive` | 移动端滚动事件 | 不能与 `.prevent` 共用 | | `.exact` | 精确控制系统修饰键组合 | 需 Vue 2.5+ | | `.once` | 一次性操作(如表单提交) | 解绑后不影响手动触发 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值