v-on事件修饰符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了v-on事件修饰符相关的知识,希望对你有一定的参考价值。

参考技术A v-on提供了很多事件修饰符,本文只涉及常用的五种:

首先我们将子->父逐级响应方式定义为冒泡。如果不加修饰符,事件响应方式就是冒泡。

最佳响应者->父标签->父父标签->...

为了方便理解,定位三个标签:A(子)、B( 父)、C(父父),样式如下图:

.stop 阻止父标签响应。B使用.stop修饰:点击A,冒泡响应,C不响应。所以点击B,也只有B响应。

.capture 优先响应。B使用.capture修饰:点击A,B先响应,然后是A、C。

.self 自己为最佳响应者会冒泡响应,否则不响应。B使用.self修饰:点击B,冒泡响应;点击A,B不响应,C响应;

.once 只响应一次。

使用:stop、:capture、:self、:once修饰,效果都是被修饰者不响应事件。

.prevent 阻止事件,比如a标签使用prevent修饰 <a href="" @click.prevent="action"></a> ,执行的不是href,而是action。

最后,一个事件可以使用多个修饰符,可以根据自己需求进行排列组合。

比如B使用.capture.stop 修饰,那么点击A,只有B会响应事件,A不会响应。

669 v-on:绑定多个事件,参数传递,修饰符











v-on绑定事件


v-on的用法


v-on的基本使用


v-on参数传递


v-on的修饰符


08_v-on的基本使用.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>

  <style>
    .area {
      width: 200px;
      height: 200px;
      background: red;
    }
  </style>
</head>
<body>
  <div id="app"></div>

  <template id="my-app">
    <!-- 完整写法: v-on:监听的事件="methods中方法" -->
    <button v-on:click="btn1Click">按钮1</button>
    <div class="area" v-on:mousemove="mouseMove">div</div>
    <!-- 语法糖 -->
    <button @click="btn1Click">按钮1</button>
    <!-- 绑定一个表达式: inline statement -->
    <button @click="counter++">{{counter}}</button>
    <!-- 绑定一个对象 -->
    <div class="area" v-on="{click: btn1Click, mousemove: mouseMove}"></div>
    <div class="area" @="{click: btn1Click, mousemove: mouseMove}"></div>
  </template>

  <script src="../js/vue.js"></script>
  <script>
    const App = {
      template: \'#my-app\',
      data() {
        return {
          message: "Hello World",
          counter: 100
        }
      },
      methods: {
        btn1Click() {
          console.log("按钮1发生了点击");
        },
        mouseMove() {
          console.log("鼠标移动");
        }
      }
    }

    Vue.createApp(App).mount(\'#app\');
  </script>
</body>
</html>   

09_v-on的参数传递.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app"></div>

  <template id="my-app">
    <!-- 默认传入event对象, 可以在方法中获取 -->
    <button @click="btn1Click">按钮1</button>
    <!-- $event可以获取到事件发生时的事件对象 -->
    <button @click="btn2Click($event, \'coderwhy\', 18)">按钮2</button>
  </template>

  <script src="../js/vue.js"></script>
  <script>
    const App = {
      template: \'#my-app\',
      data() {
        return {
          message: "Hello World"
        }
      },
      methods: {
        btn1Click(event) {
          console.log(event);
        },
        btn2Click(event, name, age) {
          console.log(name, age, event);
        }
      }
    }

    Vue.createApp(App).mount(\'#app\');
  </script>
</body>
</html>

10_v-on的修饰符.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app"></div>

  <template id="my-app">
    <div @click="divClick">
      <button @click.stop="btnClick">按钮</button>
    </div>
    <input type="text" @keyup.enter="enterKeyup">
  </template>

  <script src="../js/vue.js"></script>
  <script>
    const App = {
      template: \'#my-app\',
      data() {
        return {
          message: "Hello World"
        }
      },
      methods: {
        divClick() {
          console.log("divClick");
        },
        btnClick() {
          console.log(\'btnClick\');
        },
        enterKeyup(event) {
          console.log("keyup", event.target.value);
        }
      }
    }

    Vue.createApp(App).mount(\'#app\');
  </script>
</body>
</html>

以上是关于v-on事件修饰符的主要内容,如果未能解决你的问题,请参考以下文章

Vue指令之v-on的缩写和事件修饰符

Vue指令之v-on的缩写和事件修饰符

v-On的修饰符

v-on 事件修饰符

v-on事件修饰符

VUE的事件修饰符