vue 事件修饰符和修饰符

本文深入探讨了Vue.js中事件修饰符如.stop、.prevent和.data,以及数据修饰符如.lazy、.number和.trim的使用方法,帮助开发者更精细地控制事件行为和数据输入。

1.事件修饰符是由点开头的指令后缀来表示的。

  • .stop
  • .prevent
  • .capture
  • .self
  • .once
  • .passive

注意:不要把 .passive 和 .prevent 一起使用,因为 .prevent 将会被忽略,同时浏览器可能会向你展示一个警告。请记住,.passive 会告诉浏览器你不想阻止事件的默认行为。

<!-- 阻止单击事件继续传播 -->
<a v-on:click.stop="doThis"></a>

<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>

<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a>

<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>

<!-- 添加事件监听器时使用事件捕获模式 -->
<!-- 即元素自身触发的事件先在此处理,然后才交由内部元素进行处理 -->
<div v-on:click.capture="doThis">...</div>

<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div v-on:click.self="doThat">...</div>

注意:使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。
2.修饰符

.lazy
在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 (除了输入法组合文字时)。你可以添加 lazy 修饰符,从而转变为使用 change 事件进行同步:

<!-- 在“change”时而非“input”时更新 -->
<input v-model.lazy="msg" >

.number
如果想自动将用户的输入值转为数值类型,可以给 v-model 添加 number 修饰符:

<input v-model.number="age" type="number">

.trim
如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符:

<input v-model.trim="msg">
### Vue.js 事件修饰符使用方法 Vue.js 提供了一组简洁的事件修饰符,用于简化常见的 DOM 事件处理逻辑。这些修饰符可以直接附加到 `v-on` 指令上,帮助开发者快速实现特定的功能。 #### 常见事件修饰符及其作用 以下是 Vue.js 中常用的事件修饰符以及它们的作用: 1. **`.stop`** 阻止事件继续传播(即阻止事件冒泡)。此修饰符适用于需要防止事件冒泡的情况[^1]。 2. **`.prevent`** 调用 `event.preventDefault()` 方法,通常用来阻止默认行为。例如,阻止 `<a>` 标签跳转或者表单提交刷新页面的行为。 3. **`.capture`** 添加事件监听器时采用捕获模式。这意味着事件会在捕获阶段被触发,而不是在冒泡阶段[^2]。 4. **`.self`** 只有当事件是从绑定元素本身触发时才执行处理器。如果事件是由子元素触发,则不会调用该事件处理器。 5. **`.once`** 确保事件只触发一次。之后即使再次发生相同的事件也不会再响应。 6. **`.passive`** 表明事件处理器永远不会调用 `preventDefault`。这有助于浏览器优化滚动性能,尤其是在移动端设备上。 #### 示例代码展示 以下是一些常见场景下的示例代码: ##### 使用 `.stop` `.prevent` ```html <div id="app"> <!-- 防止 a 标签跳转 --> <a @click.prevent="handleClick" href="http://www.baidu.com">链接</a> <!-- 阻止事件冒泡 --> <button @click.stop="innerButtonClicked">内部按钮</button> </div> <script> new Vue({ el: '#app', methods: { handleClick() { console.log('点击了链接'); }, innerButtonClicked() { console.log('点击了内部按钮'); } } }); </script> ``` ##### 结合 `$event` 对象获取更多信息 ```html <div id="app"> <p @mousemove="logCoordinates($event)">移动鼠标可以看到坐标变化</p> </div> <script> new Vue({ el: '#app', methods: { logCoordinates(event) { console.log(`X: ${event.clientX}, Y: ${event.clientY}`); } } }); </script> ``` #### 官方文档中的推荐实践 官方文档建议尽可能使用原生 JavaScript 的方式来处理复杂事件逻辑,而非过度依赖修饰符。这是因为过多的修饰符可能会降低代码可读性维护性[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值