(编辑:jimmy 日期: 2024/12/26 浏览:2)
Vue 事件处理方法
可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。
v-on:click 单击事件
<button class=" btn btn-info" v-on:click="add(1)"> + + </button>
<button class=" btn btn-danger " v-on:click="subtract(1)"> - - </button>
v-on:dblclick 双击事件
<!-- 缩写语法 -->
<button class=" btn btn-info" @dblclick="add(5)"> + + </button>
<button class=" btn btn-danger " @dblclick="subtract(5)"> - - </button>
v-on:mousemove\mouseout 鼠标事件
<div class="canvas" @mouseout ="update"> {{ x }} - {{ y }} </div> new Vue({ el:".vue-app", data:{ age: 25, x:0, y:0 }, methods:{ add:function(inc){ this.age += inc; }, subtract:function(dec){ this.age -= dec ; }, update:function(event){ // console.log(event); this.x = event.offsetX; this.y = event.offsetY; } } });
然而许多事件处理逻辑会更为复杂,所以直接把 JavaScript 代码写在 v-on 指令中是不可行的。因此 v-on 还可以接收一个需要调用的方法名称。
Vue.js 事件修饰符
在事件处理程序中尽管我们可以在方法中轻松实现这点,但更好的方式是:方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。
为了解决这个问题,Vue.js 为 v-on 提供了事件修饰符。之前提过,修饰符是由点开头的指令后缀来表示的。
.stop
.prevent
.capture
.self
.once
.passive
<!-- 阻止事件继续传播 --> <p v-on:mousemove.stop> Stop </p> <!-- 点击事件将只会触发一次 --> <button class=" btn btn-info" v-on:click.once="add(1)"> + + </button> <!--点击 A 链接弹出提示内容,不再重载页面 --> <p><a v-on:click.prevent ="alert() " href="http://blog.023xs.cn" rel="external nofollow" >blog.023xs.cn</a></p>
注意事项:使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。
Vue 按键修饰符
在监听键盘事件时,我们经常需要检查常见的键值。Vue 允许为 v-on 在监听键盘事件时添加按键修饰符:
<!-- 用户输入内容时,按下Enter 键才会触发事件 --> <input v-on:keyup.enter="Email" type="text" class="form-control" placeholder="Email"> <!-- 用户输入内容时,按下删除”或“退格”键 键才会触发事件 --> <input v-on:keyup.delete="Email" type="text" class="form-control" placeholder="Email">
全部的按键别名:
.enter
.tab
.delete (捕获“删除”和“退格”键)
.esc
.space
.up
.down
.left
.right
记住所有的 keyCode 比较困难,所以 Vue 为最常用的按键提供了别名,当然也可以通过全局 config.keyCodes 对象自定义按键修饰符别名。
补充知识:vue给同一元素绑定单击click和双击事件dblclick,执行不同逻辑
在做项目过程中,需求是点击孔位单击弹出对话框查看产品总数,双击弹出对话框查看详情。一开始直接click和dblclick写在标签里面,但是不管怎么样,总是执行单击事件
解决办法:利用计时器,在大概时间模拟双击事件
html部分代码:
<div class="grid-content"> <el-button v-for="(item,index) in items" :key="index" @click="storageCount(item.id)" @dblclick.native="storageDetail(item.id)" class="inline-cell" :class="colors[item.status]"> {{item.id}}</el-button> </div>
.native主要用于监听组件根元素的原生事件,主要是给自定义的组件添加原生事件。
官方对.native修饰符的解释为:有时候,你可能想在某个组件的根元素上监听一个原生事件。可以使用 v-on 的修饰符 .native
js部分代码
<script> import desDialog from './dialog'; import detailDialog from './detailDialog'; var time = null; // 在这里定义time 为null export default { name: 'storeTable', components: { desDialog, detailDialog }, props: ['providerid'], data() { return { colors: ['space', 'isBuy'], showDialog: false, showDialogT: false }; }, methods: { // 单击事件函数 storageCount(id) { clearTimeout(time); //首先清除计时器 time = setTimeout(() => { this.showDialog = !this.showDialog; const obj = {}; obj.cutname = id; obj.providerid = this.providerid; this.$store.dispatch('GetStorageCount', obj); }, 300); //大概时间300ms }, // 双击事件函数,清除计时器,直接处理逻辑 storageDetail(id) { clearTimeout(time); //清除 this.showDialogT = !this.showDialogT; const obj = {}; obj.cutname = id; obj.providerid = this.providerid; this.$store.dispatch('GetStorageDetail', obj); }, close() { this.showDialog = false; }, closeT() { this.showDialogT = false; } } }; </script>
以上这篇vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。