Vue核心基础2:事件处理 和 事件修饰符

1 事件处理

1.1 点击事件

javascript 复制代码
<body>
    <div id="root">
        <h1>姓名: {{ name }}</h1>
        <h1>地址: {{ address }}</h1>
        <!-- <button v-on:click="showInfo">提示信息</button> -->
        <!-- 简写形式 -->
        <button @click="showInfo1">提示信息1(不传参)</button>
        <button @click="showInfo2($event, 66)">提示信息2(传参)</button>
    </div>
    <script>
        const vm = new Vue({
            el: '#root',
            data: {
                name: '张三',
                address: '北京'
            },

            methods: {
                showInfo1(event) {
                    // alert('同学你好!')
                    console.log(event.target.tagName)
                    console.log(this)  // 此处的this是vm
                },
                showInfo2(event, number) {
                    console.log(event.target.tagName)
                    console.log(number)
                }
            }
        })
    </script>
</body>

2 事件修饰符

2.1 prevent 阻止默认事件

javascript 复制代码
<a href="http://www.baidu.com" @click.prevent="showInfo">百度</a>
javascript 复制代码
    <script>
        const vm = new Vue({
            el: '#root',
            data: {
                name: '张三',
                address: '北京'
            },

            methods: {
                showInfo(e) {
                    alert('同学你好!')
                    // e.preventDefault() // 阻止默认行为 ->  vue中有简洁的写法 @click.prevent
                }
            }
        })
    </script>

2.2 stop 阻止事件冒泡

javascript 复制代码
<div class="demo1" @click="showInfo1">
       <button @click.stop="showInfo1">点我提示信息</button>
</div>
javascript 复制代码
    <script>
        const vm = new Vue({
            el: '#root',
            data: {
                name: '张三',
                address: '北京'
            },
            methods: {
                showInfo1(e) {
                    alert('同学你好 1111')
                    // e.stopPropagation() // 阻止事件冒泡 ->  vue中有简洁的写法 @click.stop
                },
            }
        })
    </script>

2.3 once 事件只触发一次

javascript 复制代码
<button @click.once="showInfo2">点我提示信息</button>
javascript 复制代码
    <script>
        const vm = new Vue({
            el: '#root',
            data: {
                name: '张三',
                address: '北京'
            },

            methods: {
                showInfo2(e) {
                    alert('同学你好 2222')
                },
            }
        })
    </script>

2.4 capture 使用事件的捕获模式, 正常在冒泡阶段处理事件,通过这个可以在捕获阶段处理事件

javascript 复制代码
<div class="demo1" @click.capture="showInfo3(1)">
      <button @click="showInfo3(2)">点我提示信息</button>
</div>
javascript 复制代码
    <script>
        const vm = new Vue({
            el: '#root',
            data: {
                name: '张三',
                address: '北京'
            },

            methods: {
                showInfo3(msg) {
                    console.log(msg)   // 先1后2
                    // 原本在冒泡阶段处理事件,应是先输出2,再输出1
                },
            }
        })
    </script>

2.5 self 只有event.target是当前操作的元素时才触发事件

javascript 复制代码
<!-- 在下述中,因为当前操作的元素是button,所以不触发div -->
<div class="demo1" @click.self="showInfo4">
      <button @click="showInfo4">点我提示信息</button>
</div>
javascript 复制代码
    <script>
        const vm = new Vue({
            el: '#root',
            data: {
                name: '张三',
                address: '北京'
            },

            methods: {
                showInfo4(e) {
                    console.log(e.target)  // <button>点我提示信息</button>
                },
            }
        })
    </script>

2.6 passive 事件的默认行为立即执行, 无需等待事件回调执行完毕

javascript 复制代码
        <!-- @scroll 为滚动条滚动 -->
        <!-- <ul @scroll="demo" class="list">
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
        </ul> -->
        <!-- @wheel 为鼠标滚轮滚动  但是滚到最后的位置,仍然触发 -->
        <ul @wheel.passive="demo" class="list">
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
        </ul>
javascript 复制代码
    <script>
        const vm = new Vue({
            el: '#root',
            data: {
                name: '张三',
                address: '北京'
            },

            methods: {
                demo() {
                    console.log('滚动了')
                }
            }
        })
    </script>

3 键盘事件

javascript 复制代码
<body>
    <div id="root">

        <input type="text" placeholder="按下回车提示输入" @keyup.enter="showInfo">

        <!-- CapsLock  切换大小写键, 写法需要用斜杠连接才有效果 -->
        <input type="text" placeholder="按下回车提示输入" @keyup.caps-lock="showInfo">

    </div>
    <script>
        // Vue.config.keyCodes.huiche = 13  // 定义了一个回车别名按键
        const vm = new Vue({
            el: '#root',
            data: {
                name: 'Vue'
            },

            methods: {
                showInfo(e) {
                    // if (e.keyCode !== 13) return    传统做法
                    console.log(e.target.value)
                    // console.log(e.key, e.keyCode)
                }
            }
        })
    </script>
</body>

总结:

1.Vue中常用的按键别名:

回车 => enter

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

退出 => esc

空格 => space

换行 => tab (特殊,必须配合keydown使用)

上 => up

下 => down

左 => left

右 => right

  1. Vue未提到别名的按键,可以使用按键原始的Key值绑定,但注意用短横线连接

  2. 系统修饰键(用法特殊):ctrl, shfit, alt, win/meta

(1).这几个键配合keyup使用:按下修饰键,再按下其他键,随后释放其他键,事件才被触发(想要指定特定的键可以, 比如指定y: @keyup.ctrl.y)

(2).配合keydown使用:正常触发事件

4.也可以使用keyCode去指定具体的按键(不推荐)

  1. Vue.config.keyCodes.自定义键名 = 键码 可以去定制按键别名
相关推荐
hhb_61828 分钟前
一键生成数据看板,ECharts实战演示
前端·javascript·echarts
const_qiu2 小时前
第一章 1.1-1.2:基础模型调用与 TypeScript 入门 —— Java 开发者的视角
java·javascript·typescript
雪芽蓝域zzs5 小时前
第 7 节:多边形点击弹窗 + 清空绘制按钮
vue.js
溪语流沙5 小时前
【Web全栈进阶】Composition API与组件通信:props深入、emit、插槽
前端·css·vue.js
衍辉channel6 小时前
衍辉AI速递 10.14|谷歌发布Gemini 4 Argon模型等9条AI资讯
javascript
vipxieliang6 小时前
JavaScript 事件循环与任务队列:从 setTimeout 到 Promise
前端·javascript
Misnearch7 小时前
React中的回调
前端·javascript·react.js
顽疲8 小时前
Java vue 养老系统源码详解:入住核算单 live-check 缴费入账与预交金收据实践
java·vue.js·python·java 养老·springboot 养老·vue养老
Eider19989 小时前
大模型输出格式幻觉解决思路
开发语言·前端·javascript
志尊宝9 小时前
Vue3 零基础每日笔记(085):项目上线前 Checklist——环境变量、报错监控、安全自查
前端·javascript·笔记·安全·信息可视化·echarts