Vue教学4

本文介绍了如何在Vue.js中正确处理事件,包括如何绑定点击事件、回调函数的放置、常用事件修饰符如prevent、stop和once的用法,以及键盘事件的监听和自定义键名。
摘要由CSDN通过智能技术生成

一、事件处理

        1.事件的基本使用

                首先做一个按钮绑定事件的一个实例,并用到指令 v-on: 可简写为 @

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
</head>
<body>
<div id="root">
    <h2>{{name}}</h2>
    // 在Vue中要给一个元素绑定事件得用指令.  v-on:当...的时候 click:点击 "showInfo":回调函数
    // 所以当点击这个按钮的时候就会执行showInfo这个函数
    <button v-on:click="showInfo">点我提示信息</button>
</div>

<script type="text/javascript">
    new Vue({
        el: "#root",
        data: {
            name: "Hello"
        }

    })
</script>
</body>
</html>

                那问题来了,这个回调函数该写在哪了呢?

                        当写在Vue外面时:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
</head>
<body>
<div id="root">
    <h2>{{name}}</h2>
    <button v-on:click="showInfo">点我提示信息</button>
</div>
 
<script type="text/javascript">
    function showInfo() {
        alert("你好")
    }

    new Vue({
        el: "#root",
        data: {
            name: "Hello"
        }

    })
</script>
</body>
</html>

                 所以我们应该把回调函数写在Vue实例里面去,要使用配置对象 methods:{}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
</head>
<body>
<div id="root">
    <h2>{{name}}</h2>
    <button v-on:click="showInfo">点我提示信息</button>
</div>

<script type="text/javascript">
    new Vue({
        el:"#root",
        data:{
            name:"Hello"
        },
        methods:{
            showInfo(){
                alert("你好啊")
            }
        }
    })
</script>
</body>
</html>

        2.事件修饰符

                Vue中有很多修饰符,下面我来介绍几个常用的事件修饰符

                (1)prevent: 阻止默认事件

                        首先定义了一个a标签,在网页上点击它时会默认跳转到另一个网页。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
</head>
<body>
<div id="root">
    <h2>{{name}}</h2>
    <a href="https://www.baidu.com" @click="showInfo">点我前往</a>
</div>

<script type="text/javascript">
    new Vue({
        el: "#root",
        data: {
            name: "Hello"
        },
        methods: {
            showInfo() {
                alert("你好啊")
            }
        }
    })
</script>
</body>
</html>

                         如果我们不想让它默认跳转,就需要使用prevent修饰符

                                只需要在@click后加 .prevent 即可

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
</head>
<body>
<div id="root">
    <h2>{{name}}</h2>
    <a href="https://www.baidu.com" @click.prevent="showInfo">点我前往</a>
</div>

<script type="text/javascript">
    new Vue({
        el: "#root",
        data: {
            name: "Hello"
        },
        methods: {
            showInfo() {
                alert("你好啊")
            }
        }
    })
</script>
</body>
</html>

                (2)stop: 阻止事件冒泡

在div标签下面再创建了个button按钮,当两个都有点击事件时,在页面打开点击按钮时会出现事件冒泡,会出现两次弹窗。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
    <style>
        *{
            margin-top: 12.5px;
        }
        .demo1{
            height: 50px;
            background: skyblue;
        }
    </style>
</head>
<body>
<div id="root">
    <div class="demo1" @click="showInfo">
        <button @click="showInfo">点我提示信息</button>
    </div>
</div>

<script type="text/javascript">
    new Vue({
        el: "#root",
        methods: {
            showInfo() {
                alert("你好啊")
            }
        }
    })
</script>
</body>
</html>

 与prevent同理,阻止事件冒泡要在按钮 bottton 的 @click 后面加上 .stop

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
    <style>
        *{
            margin-top: 12.5px;
        }
        .demo1{
            height: 50px;
            background: skyblue;
        }
    </style>
</head>
<body>
<div id="root">
    <div class="demo1" @click="showInfo">
        <button @click.stop="showInfo">点我提示信息</button>
    </div>
</div>

<script type="text/javascript">
    new Vue({
        el: "#root",
        methods: {
            showInfo() {
                alert("你好啊")
            }
        }
    })
</script>
</body>
</html>

                 (3)once: 事件只触发一次

                        首先也定义一个按钮botton

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
</head>
<body>
<div id="root">
    <button @click="showInfo">点我提示信息</button>
</div>

<script type="text/javascript">
    new Vue({
        el: "#root",
        methods: {
            showInfo() {
                alert("你好啊")
            }
        }
    })
</script>
</body>
</html>

         如果我们想要这个按钮只触发一次,在这个按钮点了一次出现弹框后,再点击这个按钮就不会再出现弹框就需要 once 这个修饰符  同前两个一样,在 @click 后面加上 .once

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
</head>
<body>
<div id="root">
    <button @click.once="showInfo">点我提示信息</button>
</div>

<script type="text/javascript">
    new Vue({
        el: "#root",
        methods: {
            showInfo() {
                alert("你好啊")
            }
        }
    })
</script>
</body>
</html>

                 (4)修饰符可以连续写

将之前修饰符 prevent 和 stop 的实例一起结合运用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
    <style>
        *{
            margin-top: 12.5px;
        }
        .demo1{
            height: 50px;
            background: skyblue;
        }
    </style>
</head>
<body>
<div id="root">
    <div class="demo1" @click="showInfo">
        <a href="https://www.baidu.com" @click="showInfo">点我提示信息</a>
    </div>
</div>

<script type="text/javascript">
    new Vue({
        el: "#root",
        methods: {
            showInfo() {
                alert("你好啊")
            }
        }
    })
</script>
</body>
</html>

 最后改进成这样即可

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
    <style>
        *{
            margin-top: 12.5px;
        }
        .demo1{
            height: 50px;
            background: skyblue;
        }
    </style>
</head>
<body>
<div id="root">
    <div class="demo1" @click="showInfo">
<!--        修饰符可以连续写,但是也有先后行为,例:@click.prevent.stop  表先阻止默认事件,再阻止冒泡-->
        <a href="https://www.baidu.com" @click.prevent.stop="showInfo">点我提示信息</a>
    </div>
</div>

<script type="text/javascript">
    new Vue({
        el: "#root",
        methods: {
            showInfo() {
                alert("你好啊")
            }
        }
    })
</script>
</body>
</html>

        3.键盘事件

                (1)Vue中常用的按键别名:

                        回车        ==>        enter

                        删除        ==>        delete (捕获“删除”和“退格”键)

                        退出        ==>        esc

                        空格        ==>        space

                        换行        ==>        tab

                        上            ==>        up

                        下            ==>        down

                        左            ==>        left

                        右            ==>        right

                         keyup:按下键盘 并且释放该键才会触发

                         keydown:按下键盘,在没释放该键时就会触发

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
</head>
<body>
<div id="root">
    <h2>{{name}}</h2>
<!--                                                 @keyup.enter 在输入完成后按下enter按钮的时候便会执行showInfo函数-->
    <input type="text" placeholder="按下回车提示输入" @keyup.enter="showInfo">
</div>

<script type="text/javascript">
    new Vue({
        el: "#root",
        data:{
            name:"hello"
        },
        methods: {
            showInfo(e) {
                console.log(e.target.value)
            }
        }
    })
</script>
</body>
</html>

                (2)Vue未提供别名的按键,可以使用按键原始的key值去绑定,但注意要转为kebab-case(短横线命名)

                (3)系统修饰键(用法特殊):ctrl、alt、shift、meta

                        1.配合keyup使用:按下修饰键的同时,再按下其他任意键,随后要释放这个键,事件便能触发

                        2.配合keydown使用:正常触发事件。(按下去之后,释放之前就会触发)

                (4)Vue.config.keyCodes.自定义键名 = 键码, 可以去定制按键别名

  • 41
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值