天天看点

详解事件监听v-on的使用方法事件监听

事件监听

在前端开发中,需要经常和用于交互,必须监听用户发生的时间,比如点击、拖拽、键盘事件等等

在Vue中如何监听事件呢?使用v-on指令

v-on介绍

  • 作用:绑定事件监听器
  • 缩写:@
  • 预期:Function | Inline Statement | Object
  • 参数:event

v-on基础

我们用一个监听按钮的点击事件,来简单看看v-on的使用

下面的代码中,我们使用了v-on:click="counter++”

另外,我们可以将事件指向一个在methods中定义的函数

详解事件监听v-on的使用方法事件监听
详解事件监听v-on的使用方法事件监听
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="vue.js"></script>
</head>

<body>
    <div id="app">
        <h2>{{counter}}</h2>
        <button @click={{counter++}}>+</button>
        <button @click={{counter--}}>-</button>
    </div>
    <script>
        let app = new Vue({
            el: '#app',
            data: {
                counter: 0
            }
        })
    </script>
</body>

</html>
           

v-on参数

当通过methods中定义方法,以供@click调用时,需要注意参数问题:

  1. 如果该方法不需要额外参数,那么方法后的()可以不添加。

    但是注意:如果方法本身中有一个参数,那么会默认将原生事件event参数传递进去

<button @click="btn1Click()">按钮1</button>
<button @click="btn1Click">按钮1</button>
           
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊',
      abc: 123
    },
    methods: {
      btn1Click() {
        console.log("btn1Click");
      },
      btn2Click(event) {
        console.log('--------', event);
      },
      btn3Click(abc, event) {
        console.log('++++++++', abc, event);
      }
    }
  })
</script>
           
  1. 如果需要同时传入某个参数,同时需要event时,可以通过$event传入事件。
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊',
      abc: 123
    },
    methods: {
      btn1Click() {
        console.log("btn1Click");
      },
      btn2Click(event) {
        console.log('--------', event);
      },
      btn3Click(abc, event) {
        console.log('++++++++', abc, event);
      }
    }
  })
</script>
           
  1. 如果函数需要参数,但是没有传入, 那么函数的形参为undefined
function abc(name) {
     console.log(name);
   }
  
  abc()
           
详解事件监听v-on的使用方法事件监听
详解事件监听v-on的使用方法事件监听

v-on修饰符

在某些情况下,我们拿到event的目的可能是进行一些事件处理。

Vue提供了修饰符来帮助我们方便的处理一些事件:

  • .stop - 调用 event.stopPropagation()。
  • .prevent - 调用 event.preventDefault()。
  • .{keyCode | keyAlias} - 只当事件是从特定键触发时才触发回调。
  • .native - 监听组件根元素的原生事件。
  • .once - 只触发一次回调。
详解事件监听v-on的使用方法事件监听
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="vue.js"></script>
</head>

<body>
    <div id="app">
        <div @click="divClick">
            aaaa
            <button @click.stop="btnClick">按钮</button>
            <br><br>
            <form action="baidu">
                <input type="submit" value="提交" @click.prevent="submitClick">
            </form>
            <input type="text" @keyup.enter="keyUp">

            <button @click.once="btn2Click">按钮2</button>
        </div>
        <script>
            let app = new Vue({
                el: '#app',
                data: {
                    message: '你好啊'
                },
                methods: {
                    btnClick() {
                        console.log("btnClick");
                    },
                    divClick() {
                        console.log("divClick");
                    },
                    submitClick() {
                        console.log('submitClick');
                    },
                    keyUp() {
                        console.log('keyUp');
                    },
                    btn2Click() {
                        console.log('btn2Click');
                    }
                }
            })
        </script>
    </div>
</body>

</html>