首页 > 其他分享 >Vue事件修饰符

Vue事件修饰符

时间:2024-06-11 22:57:39浏览次数:21  
标签:me function Vue console log 修饰符 call 事件 按钮

1.vue的事件修饰符有哪些

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

 2.使用方法

.stop,相当于原生写法中的event.stopPropagation(),用于阻止事件冒泡

<template>
    <div @click="father">
        <button @click.stop="son"></button>
    </div>
</template>

<script setup>
function father(){
    console.log("call me father")
}

function son(){
    console.log("call me son")
}
</script>

//输出结果
//call me son
//因为stop防止子元素的click事件冒泡到父元素,所以不会call me father

.prevent,相当于原生写法中的event.preventDefault(),用于阻止默认事件

<template>
    <!-- 提交事件将不再重新加载页面 -->
    <form @submit.prevent="onSubmit"></form>
    <!-- 也可以只有修饰符 -->
    <form @submit.prevent></form>
</template>

.self 

<template>
    <div @click.self="father">
		<button @click="son">按钮</button>
	</div>
</template>

<script setup>
    function son(){
	    console.log("call me son")
    }
    function father(){
	    console.log("call me father")
    }
</script>

//点击按钮,输出 "call me son"
//点击div,输出"call me father"
//这里是有别于stop的,添加了self修饰符的事件,只有事件触发到本身,才会执行事件

.capture,添加该事件修饰符,如果有内部事件被触发,会优先执行当事件(即添加了.capture的事件优先执行)

<template>
    <div @click.capture="father">
		<button @click="son">按钮</button>
	</div>
</template>

<script setup>
    function son(){
	    console.log("call me son")
    }
    function father(){
	    console.log("call me father")
    }
</script>

//点击按钮,优先输出 "call me father",在输出"call me son"
//若是不加.capture,则先输出"call me son",再输出"call me father"

 .once,添加了该事件修饰符,事件仅会触发一次

 

<template>
    <button @click="fn">按钮</button>
</template>

<script setup>
    function fn(){
	    console.log("call me fn")
    }
</script>

//点击按钮,输出 "call me fn"
//再次点击按钮,不会再有输出

 .passive,添加了该事件修饰符,主要应用于scroll事件,提升滚动性能

<template>
    <div @scroll.passive="onScroll">...</div>
</template>

这里根据官方文档的描述,我说句实话,根本看不懂

 因此我去搜索了一下,这篇文章说的非常好,推荐大家看一下,很快就能理解Vue事件处理:.passive修饰符与应用场景_vue passive-CSDN博客

大概意思就是某些场景下我们会往scroll事件里添加event.preventDefault(),浏览器也默认我们会加入peventDefault(),所以每次滚动事件产生时都会去查询是否有preventDefault(),也就是每次滑动都会去做这个操作,我们是没办法跳过的,Vue就一顿操作,给我们提供了这个修饰符,只要加了这个.passive,内核线程就会跳过查询preventDefault()的操作,从而提高性能!

但是这个.passive是不能与.prevent混用的,否则会出现警告,并且忽略.prevent

3.链式调用

链式调用就大有讲究了,请大家先看代码,顺便思考一下点击按钮1和按钮2的输出内容

<template>
	<div @click="container" style="background-color:blue;padding:20px">
		<div @click.self.stop="children" style="background-color:red;padding:10px">
			<button @click="fn1">按钮1</button>
			<button @click="fn2">按钮2</button>
		</div>
	</div>
</template>

<script setup>
    function fn1(){
	    console.log(111)
    }
    function fn2(){
	    console.log(222)
    }
    function container(){
	    console.log('all')
    }
    function children(){
	    console.log("children")
    }
</script>

下面是开古时刻:依次输出111, all 和 222, all 

看到中间那层@click.self.stop=“children”,这便是链式调用的使用方式,意思是,点击到了自己才会触发,且不冒泡,所以当我们触发该层的点击事件是,仅输出"children"

但是大家别以为到这里就完了!!

如果我们调转链式调用的顺序,结果就完全不同了,大家可以再思考一下点击按钮1和按钮2的输出内容

<template>
	<div @click="container" style="background-color:blue;padding:20px">
		<div @click.stop.self="children" style="background-color:red;padding:10px">
			<button @click="fn1">按钮1</button>
			<button @click="fn2">按钮2</button>
		</div>
	</div>
</template>

<script setup>
    function fn1(){
	    console.log(111)
    }
    function fn2(){
	    console.log(222)
    }
    function container(){
	    console.log('all')
    }
    function children(){
	    console.log("children")
    }
</script>

下面又是开古时刻:依次输出111 和 222

这里是优先执行了禁止冒泡(.stop),再执行了(.self),也就是按钮1,按钮2最多只能冒泡到children,所以按道理会输出"111","children"和"222","children",但由于链式调用了.self,也就是只有触发children本身才会输出children,因此只会输出111和222

除此之外,还有其他链式调用的方法,但是大家一定要理解这个调用顺序,下面是官方文档的例子

由于prevent不太能从代码上体现得出,因此我用了.stop和.self

想不到小小一个事件修饰符也能如此深奥,下面我将继续完善剩余的按键修饰符与鼠标按键修饰符 

标签:me,function,Vue,console,log,修饰符,call,事件,按钮
From: https://blog.csdn.net/word_tian_/article/details/139601786

相关文章

  • 小程序中的事件处理
    事件处理一个应用仅仅只有界面展示是不够的,还需要和用户做交互,例如:响应用户的点击、获取用户输入的值等等,在小程序里边,我们就通过编写JS脚本文件来处理用户的操作1.事件绑定和事件对象小程序中绑定事件与在网页开发中绑定事件几乎一致,只不过在小程序不能通过on的方......
  • 基于jeecgboot-vue3的Flowable流程--抄送我的功能
    因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。1、抄送我的界面代码如下:<template><divclass="p-2"><!--查询区域--><divclass="jeecg-basic-table-form-container"><a-formref="formRef"@keyup.enter.nati......
  • 【第1章】Vue环境搭建
    文章目录前言一、安装Node1.下载2.安装3.验证3.1npm版本与Node.js版本3.2验证环境4.npm4.1安装npm4.2安装包4.3全局安装包4.4更新包4.5删除包4.6查看已安装的包4.7初始化package.json5.国内源二、安装VisualStudioCode1.下载2.安装3.安装Vue-Offici......
  • electron + vue3 自定义窗口:移动,缩放,置顶
    electronmain.jsconst{BrowserWindow,ipcMain}=require('electron');constpath=require("path")constCustomWindow=require('./CustomWindow')constwin=newBrowserWindow({frame:false,transparent:true,......
  • Java项目:208Springboot + vue实现的校园服务平台(含论文+开题报告)
    作者主页:夜未央5788 简介:Java领域优质创作者、Java项目、学习资料、技术互助文末获取源码项目介绍基于Springboot+vue实现的汽车服务管理系统本系统包含管理员、接单员、普通用户三个角色。管理员角色:管理员管理、基础数据管理、接单详情管理、接单员管理、公告信......
  • 实现抖音视频滑动功能vue3+swiper
    首先,你需要安装和引入Swiper库。可以使用npm或者yarn进行安装。pnpminstallswiper然后在Vue组件中引入Swiper库和样式。//导入Swiper组件和SwiperSlide组件,用于创建轮播图import{Swiper,SwiperSlide}from'swiper/vue';//导入Swiper的CSS样式,确保轮播图......
  • vue初使用实例之笔记本
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><title></title><metaname="des......
  • 基于springboot+vue.js+uniapp小程序的社区团购系统附带文章源码部署视频讲解等
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaits系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于Vue+Node.js的高校学业预警系统+10551(免费领源码)可做计算机毕业设计JAVA、PHP、爬
    NodeJS高校学业预警系统摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,教育行业当然也不能排除在外。高校学业预警系统是以实际运用为开发背景,运用软件工程开发方法,采用Node.JS技术构建的一个管理系统。......
  • C# 字段 属性 方法 构造函数 索引器 事件 嵌套类型 常量 运算符重载
    字段声明字段字段初始化静态字段常量字段只读字段字段的访问然而属性声明属性自动实现的属性只读属性只写属性属性的逻辑处理属性的访问修饰符属性和字段的区别属性的用途总结索引器索引器的基本语法使用索引器索引器的关键点语法参数访问和设置异常处理性能重载使用......