站长家园(原代码之家)(www.adminjie.com)网站源码,微信源码,游戏源码,商业源码分享平台。
当前位置:网站首页 技术文章 网络编程 正文

聊聊vue指令中的修饰符,常用事件修饰符总结

时间:2022-05-09 [网络编程]作者:fabuyuan 浏览:6 次

本篇文章带大家聊聊vue指令中的修饰符,对比一下vue中的指令修饰符和dom事件中的event对象,介绍一下常用的事件修饰符,希望对大家有所帮助!

对比一下vue中的指令修饰符和dom事件中的event对象

在说vue中的修饰符之前,我门用的是dom操作中用过的event对象的常用方法/属性,event的属性有哪些呢? 我用过的event的属性如下:

1、阻止默认事件跳转(例如a标签的href的跳转、还有form表单的提交)(学习视频分享:vue视频教程

event.preventDefault()

2、阻止冒泡事件(例如父级元素绑定事件,子元素也绑定事件,如果不取消冒泡,则点击子
元素也会触发父元素的事件

event.stopPropagation()

3、阻止后续事件触发,写在A中,则后续注册的事件B不会被触发(例如按钮绑定两个事件,
通过 [优先级]的方式注册了A和B,在运行A的时候不运行B)

event.stopImmediatePropagation()

4、绑定事件的那个元素,例如ul绑定事件,然后点击li,则currentTarget返回就是ul

event.currentTarget

5、发生事件的那个元素,例如ul绑定事件,然后点击li,则target返回就是点击的那个li。

event.target

以上这些都是在dom树中操作的一些属性/方法,但使用vue框架就不需要这些dom的操作了,vue中的方法有更好更简洁的语法修饰符来实现各种功能。

事件修饰符

在事件处理程序中,总会有一些功能需要修饰,比如阻止某些默认事件跳转还有提交事件不再重载页面等等。为了解决这个问题,vuejs给v-on提供了一些事件修饰符。修饰符是由点开头的指令后缀名来表示

事件修饰符有哪些呢?

  • .stop
  • .prevent
  • .capture
  • .once

.stop

没加 .stop的打印的结果

加了 .stop的打印的结果

源代码:

  <template >
  <div @click="fnFather">
    <!-- 阻止事件冒泡 -->
    <button @click.stop="fn">阻止事件冒泡</button>
  </div>
</template>
<script>
export default {
  methods: {
    fn() {
      console.log("按钮点击了");
    },
    fnFather() {
      console.log("父元素 点击了");
    },
  },
};
</script>
<style>
</style>

得出结论

当你点击子元素时,父元素也会被触发,这就是事件冒泡。
使用 .stop 来阻止事件冒泡 也就是阻止子元素的事件传播到父元素的身上去。

.prevent

没有加 .prevent属性的效果

加了 .prevent属性的效果

源代码

<template >
  <div>
    <!-- .prevent 阻止默认事件跳转 -->
    <a href="http://taobao.com" @click.prevent="eve">阻止跳转到淘宝</a>
  </div>
</template>
<script>
export default {
  methods: {
    eve() {
      console.log("按钮点击了");
    },
  },
};
</script>

得出结论

a标签中的href属性会跳转页面,当你使用a标签做一些功能时,不需要默认跳转时,就可以使用 .prevent 来阻止默认事件跳转。 其实还有表单的提交事件也使用 .prevent 来阻止默认事件跳转

.capture

.capture 它的含义是事件捕获 虽然不常用 但还是要了解的 =

下面写了一个结构四个div的盒子

<template >
  <div @click="hand('最外层')">
    <div class="grandfather" @click="hand('抓到爷爷了')">
      <div class="father" @click="hand('抓到爸爸了')">
        <div class="son" @click="hand('抓到儿子了')"></div>
      </div>
    </div>
  </div>
</template>

没有设置 .capture 它的顺序是从内往外执行事件 这种是冒泡事件

源代码

<template >
  <div @click="hand('最外层')">
    <div class="grandfather" @click="hand('抓到爷爷了')">
      <div class="father" @click="hand('抓到爸爸了')">
        <div class="son" @click="hand('抓到儿子了')"></div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  methods: {
    hand(val) {
      console.log(val);
    },
  },
};
</script>
<style>
div {
  margin: auto;
  display: flex;
  justify-content: center;
  align-items: center;
  width: 800px;
  height: 800px;
  background-color: green;
}
.grandfather {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 500px;
  height: 500px;
  background-color: #ccc;
}
.father {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 300px;
  height: 300px;
  background-color: red;
}
.son {
  width: 100px;
  height: 100px;

  background-color: skyblue;
}
</style>

如图所示

设置了 .capture 它就会从外往里执行 可以给单个设置也可以给多个设置

源代码

<template >
  <div @click.capture="hand('最外层')">
    <div class="grandfather" @click.capture="hand('抓到爷爷了')">
      <div class="father" @click.capture="hand('抓到爸爸了')">
        <div class="son" @click.capture="hand('抓到儿子了')"></div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  methods: {
    hand(val) {
      console.log(val);
    },
  },
};
</script>
<style>
div {
  margin: auto;
  display: flex;
  justify-content: center;
  align-items: center;
  width: 800px;
  height: 800px;
  background-color: green;
}
.grandfather {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 500px;
  height: 500px;
  background-color: #ccc;
}
.father {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 300px;
  height: 300px;
  background-color: red;
}
.son {
  width: 100px;
  height: 100px;

  background-color: skyblue;
}
</style>

如图所示:

得出结论

冒泡是从里往外冒,捕获是从外往里捕.capture 它是事件捕获 当它存在时,会先从外到里的捕获,剩下的从里到外的冒泡。

.once

.once 含义是点击事件将只会触发一次 没有设置 .once 就是普通的函数正常执行

<template >
  <button @click="hand">函数只会执行一次</button>
</template>
<script>
export default {
  methods: {
    hand() {
      console.log("函数只会执行一次,再次点击不会执行");
    },
  },
};
</script>

设置了 .once 就只能执行一次

<template >
  <button @click.once="hand">函数只会执行一次</button>
</template>
<script>
export default {
  methods: {
    hand() {
      console.log("函数只会执行一次,再次点击不会执行");
    },
  },
};
</script>

得出结论

.once 就只能执行一次,再次点击就不会执行了

(学习视频分享:web前端开发、编程基础视频)

以上就是聊聊vue指令中的修饰符,常用事件修饰符总结的详细内容,更多请关注站长家园其它相关文章!

本文标签:  Vuevue.js

转载请注明来源:聊聊vue指令中的修饰符,常用事件修饰符总结

本文永久链接地址:https://www.adminjie.com/post/12117.html

免责声明:
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

附:
二○○二年一月一日《计算机软件保护条例》第十七条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!

版权声明:
一、本站致力于为软件爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的部分源码下载文件为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、我站提供用户下载的所有内容均转自互联网。如有内容侵犯您的版权或其他利益的,若有侵犯你的权益请:提交版权证明文件到邮箱 2225329873#qq.com(#换为@) 站长会进行审查之后,情况属实的会在三个工作日内为您删除。

  • 站长家园(原代码之家)会员升级
  • 最新文章
    • Excel函数学习之无所不能的SUMPRODUCT!

      Excel函数学习之无所不能的SUMPRODUCT!

      在之前的文章《Excel函数学习之神奇的AGGREGATE,竟可一个抵19个!》中,我们了解了一种强大的统计函数。而今天我们来聊聊SUMPRODUCT函数,su...

    • 一起来聊聊Laravel8的路由与控制器

      一起来聊聊Laravel8的路由与控制器

      本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于路由和控制器的相关问题,包括了路由组、跳到控制器、post路由、Ajax路由等等相关内容,下...

    • Excel实例详解实现多区间判断

      Excel实例详解实现多区间判断

      本篇文章给大家带来了关于excel的相关知识,其中主要介绍了关于多区间判断的相关问题,多区间判断的问题想必大家都遇到过,比如成绩评定、业绩考核等等,下面就一起来...

    • angular学习之浅析HttpClientModule模块

      angular学习之浅析HttpClientModule模块

      本篇文章带大家了解一下angular中的HttpClientModule模块,介绍一下请求方法、请求参数、响应内容、拦截器、AngularProxy等相关知识...

    • 浅析Vue中的插件和组件,聊聊它们的区别!

      浅析Vue中的插件和组件,聊聊它们的区别!

      组件是什么?插件是什么?下面本篇文章带大家了解一下Vue中的插件和组件,聊聊插件和组件的区别,希望对大家有所帮助!一、组件是什么回顾以前对组件的定义:组件就是把...

    热门文章