vue3.0---事件处理

一、元素的事件绑定

  • v-on:type=" " 简写@type=" "
  • 组件上method属性上写事件的方法。
		<!-- 元素的事件绑定 -->
   	<button v-on:click="handle">事件</button>
   	<!-- 简写 -->
   	<button @click="handle">事件</button>

二、事件修饰符

  • 在事件处理程序中调用event.preventDefault()或者event.stopPropagation()是非常常见的需求,尽管我们可以在方法中轻松实现这点,但更好的方式是:方法只有纯粹的数据逻辑,而不是去处理DOM事件细节。
  • Vue.js 为 v-on 提供了事件修饰符。修饰符是由点开头的指令后缀来表示的。
  • 修饰符可以连用。
  • 事件里面的this指向当前组件,3.0 版本之前输出的this指当前组件
  • vueComponent对象,3.0版本生成的是Proxy对象,但是等价于当前组件.
修饰符作用
.stop阻止事件冒泡
.prevent阻止事件默认行为
.capture修改冒泡为捕获
.self只能点击自身才触发,只有在 event.target 是当前元素自身时触发处理函数,即事件不是从内部元素触发的
.once当前事件只能触发一次
.passive不阻止默认事件,目的是告诉浏览器,你可以不用去查询程序有没有默认事件,意义是提前告知,提高性能
   <!-- 事件冒泡 -->
   <div @click="maopao" class="child">
     <!-- .stop修饰符阻止事件冒泡  -->
     <button @click.stop="maopao">child子集</button>
   </div>
   <!-- 事件捕获 -->
   <div @click.capture="buhuo(1)" class="child">
     <!-- .capture捕获修饰符,修改冒泡为捕获  -->
     <button @click="buhuo(2)">child子集</button>
   </div>
   <!-- .prevent阻止事件默认行为的修饰符  -->
   <form @submit.prevent="regest">
     <input type="text" name="name">
     <button>注册</button>
   </form>
   <!-- .self修饰符,自身执行,类似于委托,委托就是父类把它的元素委托给子类但是如果添加了.self修饰符,就只能点击自身才触发,e.target是自身才可以  -->
   <div @click.self="self" class="child">
     <button @click="self">child子集</button>
   </div>
   <!-- once修饰符当前事件只能触发一次 -->
   <button @click.once="once">触发一次</button>
   <!-- passive修饰符不阻止默认事件,目的是告诉浏览器,你可以不用去查询程序有没有默认事件,意义是提前告知,提高性能 -->
   <div class="par" v-on:scroll.passive="scroll">
     MVVM(Model View ViewModel)是一种基于MVC的设计,开发人员在HTML上写一些Bindings,利用一些指令绑定,
     就能在Model和ViewModel保持不变的情况下,很方便的将UI设计与业务逻辑分离,从而大大的减少繁琐的DOM操作。
     相比前面两种模式,MVVM 模式只是把MVC的Controller和MVP的Presenter 改名为 ViewModel,它采用双向绑定
     (data-binding):View的变化会自动更新到ViewModel,ViewModel的变化也会自动同步到View上显示。
   </div>
 </div>
  • 注:使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。
  • 不要把 .passive 和 .prevent 一起使用,因为 .prevent 将会被忽略,同时浏览器可能会向你展示一个警告。.passive 会告诉浏览器你不想阻止事件的默认行为。

三、键盘修饰符

修饰符作用
.enter按回车键触发事件
.tab在输入中文的时候按下Tab键会触发事件,但是输入英文的时候不会触发事件
.delete按回退键(Backspace)和删除键(Delete)触发事件
.esc按Esc键触发事件
.space按空格键触发事件
.up按向上箭头触发事件
.down按向下箭头触发事件
.left按向左箭头触发事件
.right按向右箭头触发事件
   <!-- .enter按回车键触发事件 -->
   <input type="text" @keyup.enter="keyp">
   <!-- .tab在输入中文的时候按下Tab键会触发事件,但是输入英文的时候不会触发事件 -->
   <input type="text" @keyup.tab="keyp">
   <!-- .delete按回退键(Backspace)和删除键(Delete)触发事件 -->
   <input type="text" @keyup.delete="keyp">
   <!-- .esc按Esc键触发事件 -->
   <input type="text" @keyup.esc="keyp">
   <!-- .space按空格键触发事件 -->
   <input type="text" @keyup.space="keyp">
   <!-- .up按向上箭头触发事件 -->
   <input type="text" @keyup.up="keyp">
   <!-- .down按向下箭头触发事件 -->
   <input type="text" @keyup.down="keyp">
   <!-- .left按向左箭头触发事件 -->
   <input type="text" @keyup.left="keyp">
   <!-- .right按向右箭头触发事件 -->
   <input type="text" @keyup.right="keyp">

四、系统修饰符

修饰符作用
.ctrl按ctrl键触发事件
.alt按alt键触发事件
.shift按shift键触发事件
.meta按meta键触发事件
  • 在 Mac 系统键盘上,meta 对应 command 键 (⌘)。在 Windows 系统键盘 meta 对应 Windows 徽标键 (⊞)。在 Sun 操作系统键盘上,meta 对应实心宝石键 (◆)。在其他特定键盘上,尤其在 MIT 和 Lisp 机器的键盘、以及其后继产品,比如 Knight 键盘、space-cadet 键盘,meta 被标记为“META”。在 Symbolics 键盘上,meta 被标记为“META”或者“Meta”。
  • 请注意修饰键与常规按键不同,在和 keyup 事件一起用时,事件触发时修饰键必须处于按下状态。换句话说,只有在按住 ctrl 的情况下释放其它按键,才能触发 keyup.ctrl。而单单释放 ctrl 也不会触发事件。
   <!-- 按住shift再点击才会触发事件 -->
   <input type="text" @click.shift="keyp">
   <!-- 按住ctrl再点击才会触发事件 -->
   <input type="text" @click.ctrl="keyp">
   <!-- 按住ctrl+shift再点击才会触发事件 -->
   <input type="text" @click.ctrl.shift="keyp">
   <!-- 按住ctrl+enter才会触发事件 -->
   <input type="text" @keyup.ctrl.enter="keyp">

1. .exact 修饰符

  • .exact 修饰符允许你控制由精确的系统修饰符组合触发的事件。
   <!-- 即使 Alt 或 Shift 被一同按下时也会触发 -->
   <input @click.ctrl="keyp">
   <!-- 有且只有 Ctrl 被按下的时候才触发 -->
   <input @click.ctrl.exact="keyp">
   <!-- 没有任何系统修饰符被按下的时候才触发 -->
   <input @click.exact="keyp">

2.鼠标按键修饰符

修饰符作用
.left按鼠标左键触发事件
.right按鼠标右键触发事件
.middle按鼠标中键滚轮触发事件
   <!-- 鼠标修饰符,鼠标的左右中键 -->
   <input @click.left="keyp">
   <input @click.right.prevent="keyp">
   <input @click.middle="keyp">

五、事件的执行参数

  • 事件的执行参数,类似原生js的时间执行参数。
  • 最常用的就是event.target,触发当前的目标元素。
  • event.target、event.srcElement、event.toElement都是触发当前的目标元素。
  • 当前事件在执行的时候如果没有参数传递,那么默认的第一个参数就是事件执行参数event,有传递参数时,暂时找不到event事件执行参数。
  • 传递参数时,怎么找event?
  • 在方法上传递参数$event,指的就是event。
<template>
   <div id="event">
       <!-- 事件的执行参数,类似原生js的时间执行参数 -->
       <button @click="handle(1,$event)">按钮</button>
   </div>
</template>
<script>
export default {
   name:"event",
   methods: {
       handle(index,e){
           //事件执行参数可以使用原生的js
           let event=window.event;
           console.log(event);
           //最常用的就是event.target,触发当前的目标元素
           //event.target、event.srcElement、event.toElement都是触发当前的目标元素
           //当前事件在执行的时候如果没有参数传递,那么默认的第一个参数就是事件执行参数event,有传递参数时,暂时找不到event事件执行参数
           //console.log(e); //event   
           //console.log(index,e);//undefined 1
           //传递参数时,怎么找event?
           //在方法上传递参数$event,指的就是event
           console.log(e);//event
       }
   },
}
</script>
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南初️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值