Vue----事件绑定指令

简介: Vue----事件绑定指令

3.6 事件绑定指令

vue提供了v-on事件绑定指令,用来辅助程序员为DOM元素绑定事件监听,原生的DOM对象有onclickoninput等原生事件,在vue中为v-on:clickv-on:input等。v-on 简写为 @

通过v-on绑定的事件处理函数,需要在methods节点中声明。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <input type="button" value="点击" v-on:click="add">
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
        const vm = new Vue({
            el: "#app",
            data: {
                tips: "请输入..."
            },
            methods: {
              //声明方法1
                // add: function() {
                //     alert('11111')
                // }
                // 或
                //声明方法2
                add() {
                    alert('1111')
                }
            }
        })
    </script>
</body>
</html>

3.6.1 事件对象

在原生的DOM事件绑定中,可以在事件处理函数的形参处,接收事件对象event。在v-on指令所绑定的事件处理函数中,同样可以接收事件对象event。没有任何传参,会默认有一个事件对象。

获取产生事件的组件, 事件对象.target。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <input type="button" value="点击" v-on:click="add">
        <p>{{ num }}</p>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
        const vm = new Vue({
            el: "#app",
            data: {
                num: 0
            },
            methods: {
              //e为事件对象,没有任何传参,会默认有一个事件对象。
                add(e) {
                    this.num++;
                    e.target.style.backgroundColor = "red";
                }
            }
        })
    </script>
</body>
</html>

点击了两次按钮

3.6.2 绑定事件并传参

在使用v-on指令绑定事件时,可以使用()进行传参。

当有主动进行传参时,事件参数对象会被覆盖,所以vue提供了$event来表示原生的事件参数对象event,$event可以解决事件参数对象被覆盖的问题。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
      <!-- add事件处理函数中传入参数 -->
        <input type="button" value="点击" v-on:click="add(10, $event)">
        <p>{{ num }}</p>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
        const vm = new Vue({
            el: "#app",
            data: {
                num: 0
            },
            methods: {
              //事件处理函数
                add(a, e) {
                    this.num+=a;
                    e.target.style.backgroundColor = "red";
                }
            }
        })
    </script>
</body>
</html>

点击了一次按钮

3.6.3 事件修饰符

在事件处理函数中调用preventDefault()stopPropagation()是非常常见的需求。因此,vue提供了事件修饰符的概念,来辅助程序员更方便的对事件的触发进行控制。常用的5个事件修饰符如下:

事件修饰符 说明
.prevent 阻止默认行为(例如:阻止a连接的跳转、阻止表单的提交等)
.stop 阻止事件冒泡
.capture 以捕获模式触发当前的事件处理函数
.once 绑定的事件只触发1次
.self 只有在event.target是当前元素自身时触发事件处理函数

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <!-- 阻止默认的跳转行为 -->
        <a href="https://www.baidu.com/?tn=44004473_27_oem_dg" @click.prevent="add">baidu</a>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
        const vm = new Vue({
            el: "#app",
            data: {
                num: 0
            },
            methods: {
                add(e) {
                }
            }
        })
    </script>
</body>
</html>

点击超链接不会跳转

3.6.4 按键修饰符

在监听键盘事件时,我们经常需要判断详细的按键。此时,可以为键盘相关的事件添加按键修饰符,例如:

<!-- 只有在按的键为enter时候调用submit方法 -->
<input @keyup.enter="submit">
<!-- 只有在按的键为esc时候调用clear方法 -->
<input @keyup.esc="clear">

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <input type="text" @keyup.esc="clear">
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
        const vm = new Vue({
            el: '#app',
            methods: {
                clear( e ) {
                    e.target.value = ''
                }
            }
        })
    </script>
</body>
</html>

按下esc键


相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
23天前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
25天前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。
|
27天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
31 1
vue学习第一章
|
23天前
|
JavaScript 前端开发 开发者
Vue是如何劫持响应式对象的
Vue是如何劫持响应式对象的
21 1
|
23天前
|
JavaScript 前端开发 API
介绍一下Vue中的响应式原理
介绍一下Vue中的响应式原理
27 1
|
23天前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
23天前
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能
|
7月前
|
JavaScript
Vue中的v-bind指令的用法有哪些?
Vue中的v-bind指令的用法有哪些?
185 37
|
JavaScript 前端开发
常用的vue指令语法用法
常用的vue指令语法用法
57 0
|
JavaScript 索引
vue指令作用以及用法
vue指令作用以及用法