zoukankan      html  css  js  c++  java
  • Vue.js学习笔记 第五篇 事件处理

    监听事件

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="https://unpkg.com/vue"></script>
    </head>
    <body>
        <div id="app-1">
            <button v-on:click="counter += 1">Add</button>
            <p>这个按钮被点击了{{ counter }}次</p>
        </div>
        <script type="text/javascript">
            var vm1 = new Vue({
                el: '#app-1',
                data: {
                    counter: 0
                }
            })
        </script>
    </body>
    </html>

    v-on指令,用于绑定事件,事件的处理是对counter变量累加

    那么问题来了,实际应用中事件的处理并没有这么简单,在处理复杂的逻辑时,这种方式就不合适了,这时需要定义一个方法来处理

    <div id="app-2">
        <button @click="hello">Hello</button>
    </div>
    <script type="text/javascript">
        var vm2 = new Vue({
            el: '#app-2',
            data: {
                name: 'TanSea'
            },
            methods: {
                hello: function(event) {
                    alert('Hello, ' + this.name + '!')
                    if (event) { alert(event.target.tagName) };
                }
            }
        })
    </script>

    这里,我们又看到了一个陌生的东西@click,他是v-on:click的简写

    到目前为止,我们已经学到了2个指令的简写方法,一个是针对属性的v-bind,一个是针对方法的v-on,可见这2个指令是Vue使用频率最高的2个指令

    Vue对象实例化时,多了一个新的参数methods(方法),用来定义事件的处理方法

    事件修饰符

    1、.once修饰符,事件只会被触发一次,版本:2.1.4+

    <div id="app-3">
        <button @click.once="count">Add</button>
        <p>这个按钮被点击了{{ counter }}次</p>
    </div>
    <script type="text/javascript">
        var vm3 = new Vue({
            el: '#app-3',
            data: {
                counter: 0
            },
            methods: {
                count: function() {
                    this.counter += 1
                }
            }
        })
    </script>

    2、.stop修饰符,阻止事件冒泡

    先解释一下什么叫事件冒泡,当父元素和子元素同时绑定了一个事件时,子元素先触发事件,父元素再触发事件

    和事件冒泡相对应的叫事件捕获,父元素先触发事件,子元素再触发事件

    <div id="app-3">
        <div @click="count">
            父元素<br>
            <p @click.stop="count">子元素</p>
        </div>
        <p>这个按钮被点击了{{ counter }}次</p>
    </div>
    <script type="text/javascript">
        var vm3 = new Vue({
            el: '#app-3',
            data: {
                counter: 0
            },
            methods: {
                count: function() {
                    this.counter += 1
                }
            }
        })
    </script>

    父元素(div)和子元素(p)同时绑定了一个事件,当点击父元素时counter加1,当点击子元素时,由于stop修饰符阻止了事件冒泡,所以counter也只加1

    如果去掉stop修饰符,当点击子元素时,counter会加2(子元素和父元素先后触发事件)

    按键修饰符

    1、按键编码

    只有在keyCode是13(“回车”键)时调用事件confirm

    <div id="app-4">
        按键编码:<input @keyup.13="confirm" v-model:value="content">
    </div>
    <script type="text/javascript">
        var vm4 = new Vue({
            el: '#app-4',
            data: {
                content: ''
            },
            methods: {
                confirm: function() {
                    alert(this.content)
                }
            }
        })
    </script>

    2、按键别名

    我们很难记住所有的keyCode,所以Vue提供了一些常用按键别名:

    .enter (“回车”键)
    .tab (“TAB”键)
    .delete (捕获 “删除” 和 “退格” 键)
    .esc (“ESC”键)
    .space (“空格”键)
    .up (向上方向键)
    .down (向下方向键)
    .left (向左方向键)
    .right (向右方向键)

    当然,除了这些常用按键别名之外,Vue也提供了自定义按键别名的方法

    Vue.config.keyCodes.f4 = 115 //全局自定义按键别名

    只有在“回车”键或"F4"键时调用事件confirm

    <div id="app-4">
        按键别名:<input @keyup.enter.f4="confirm" v-model:value="content">
    </div>
    <script type="text/javascript">
        Vue.config.keyCodes.f4 = 115
    
        var vm4 = new Vue({
            el: '#app-4',
            data: {
                content: ''
            },
            methods: {
                confirm: function() {
                    alert(this.content)
                }
            }
        })
    </script>

    3、组合按键,版本:2.1.0+

    .ctrl
    .alt
    .shift
    .meta (根据操作系统的不同而不同,Windows系统是WIN键)

    组合按键不能单独触发事件,要与非组合按键一起才能触发事件

    <!-- "回车"键 "F4"键 触发事件 -->
    <input @keyup.enter.f4="confirm">
    <!-- "回车"键 "CTRL"键 触发事件 -->
    <input @keyup.enter.ctrl="confirm">
  • 相关阅读:
    mysql多源复制,多主一从复制
    Linux初始化环境安装
    sql2014 错误:已将此(这些)订阅标记为不活动,必须将其重新初始化。需要删除NoSync 订阅,然后重新创建它们
    Jmeter之模拟文件上传、下载接口操作--转载
    配置元件 之 用户自定义的变量--转载
    多态中成员函数的特点--转载
    Jmeter:cup监控、脚本录制、执行布置----转载
    Selenium JavascriptExecutor 详解
    selenium+java自动化测试环境搭建介绍--转载
    IO实时监控命令iostat详解-转载
  • 原文地址:https://www.cnblogs.com/TanSea/p/Vue-Chapter5-Event.html
Copyright © 2011-2022 走看看