0
点赞
收藏
分享

微信扫一扫

Vue.js -- 事件绑定

绑定事件

定义事件

代码演示:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>vue事件绑定</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>
<body>
    <div id="root"></div>
    <script>
        const app = Vue.createApp({
            data(){
                return {
                    content: 0
                }
            },
            methods:{
                handleClick(){
                    this.content++;
                    console.log(this.content);
                }
            },
            template:`<div @click="handleClick">{{content}}</div>`
        })
        const vm = app.mount('#root');
    </script>
</body>
</html>

页面效果: 在这里插入图片描述

直接写表达式

代码演示:

		const app = Vue.createApp({
            data(){
                return {
                    content: 0
                }
            },
            template:`<div @click="content++">{{content}}</div>`
        })

页面效果和定义事件相同。

获取事件对象event

代码演示:

 const app = Vue.createApp({
            data(){
                return {
                    content: 0
                }
            },
            methods:{
                handleClick(event){
                    this.content++;
                    console.log('content');
                    // MouseEvent 原生的event对象
                    console.log(event);
                    // 事件挂载的DOM节点
                    console.log(event.target);
                    // 事件触发的DOM节点
                    console.log(event.currentTarget);
                }
            },
            template:`<div @click="handleClick">{{content}}</div>`
        })

页面效果:

在这里插入图片描述

获取自定义参数

代码演示:

 			const app = Vue.createApp({
            data(){
                return {
                    content: 0
                }
            },
            methods:{
                handleClick(num){
                    this.content += num;
                    console.log(this.content);
                }
            },
            template:`<div @click="handleClick(5)">{{content}}</div>`
        })

页面效果: 在这里插入图片描述

获取参数和事件对象event

代码演示:

 const app = Vue.createApp({
            data(){
                return {
                    content: 0
                }
            },
            methods:{
                handleClick(num, event){
                    this.content += num;
                    console.log(this.content, event);
                }
            },
            template:`<div @click="handleClick(5, $event)">{{content}}</div>`
        })

页面效果: 在这里插入图片描述

事件绑定多个函数

代码演示:

const app = Vue.createApp({
            data(){
                return {
                    content: 0
                }
            },
            methods:{
                handleClick(){
                    console.log('handleClick');
                },
                handleClick1(){
                    console.log('handleClick1');
                }
            },
            template:`<div @click="handleClick(), handleClick1()">{{content}}</div>`
        })

页面效果: 在这里插入图片描述

修饰符

事件修饰符

事件修饰符 描述
.stop 防止事件冒泡
.prevent: 阻止默认事件
.capture: 按照捕获的方式触发函数,从外向内执行
.self: 只触发自己的事件,不包含子元素
.once: 只触发一次

stop修饰代码演示:

const app = Vue.createApp({
            data(){
                return {
                    content: 0
                }
            },
            methods:{
                stopClick(){
                    console.log('我是内层div');
                },
                handleClick(){
                    console.log('我是外层div');
                }
            },
            template:`
                <div @click="handleClick">
                    <div @click.stop="stopClick">{{content}}</div>
                </div>
                `
        })

页面效果: 在这里插入图片描述

按键修饰符

只要按下对应的按键就能触发的事件(多按也能触发)

按键修饰符 描述
.enter 回车
.delete 删除
.tab 制表符
.esc 退出
.space 空格
.left 方向键:左
.up 方向键:上
.right 方向键:右
.down 方向键:下
... ...

代码演示:

		const app = Vue.createApp({
            data(){
                return {
                    content: 0
                }
            },
            methods:{
                enterClick(){
                    console.log('按enter键时点击触发')
                },
                altClick(){
                    console.log('按alt键时点击触发')
                },
                ctrlClick(){
                    console.log('按ctrl键时点击触发')
                }
            },
            template:`
            <div>
                <div class="content">
                    <!-- 按enter键时点击触发 -->
                    <button @click.enter='enterClick'>enter</button>
                </div>
                <div class="content">
                    <!-- 按alt键时点击触发 -->
                    <button @click.alt='altClick'>alt</button>
                </div>
                <div class="content">
                    <!-- 按click键时点击触发 -->
                    <button @click.ctrl='ctrlClick'>ctrl</button>
                </div>
		    </div>
                `
        })

页面效果: 在这里插入图片描述

鼠标修饰符

按下对应的鼠标按键就能触发事件

鼠标修饰符 描述
.left 鼠标左键
.right 鼠标右键
.middle 鼠标中键

代码演示:

		const app = Vue.createApp({
            data(){
                return {
                    content: 0
                }
            },
           methods:{
                leftClick(){
                    console.log('点击鼠标左键时触发')
                },
                middleClick(){
                    console.log('点击鼠标中键时触发')
                },
                rightClick(){
                    console.log('点击鼠标右键时触发')
                }
            },
            template:`
            <div>
                    <div class="content">
                    <!-- 点击鼠标左键时触发 -->
                    <button @click.left='leftClick'>left</button>
                </div>
                <div class="content">
                    <!-- 点击鼠标中键时触发 -->
                    <button @click.middle='middleClick'>middle</button>
                </div>
                <div class="content">
                    <!-- 点击鼠标右键时触发 -->
                    <button @click.right='rightClick'>right</button>
                </div>
		    </div>
		    </div>
                `
        })

页面效果: 在这里插入图片描述

精确修饰符

.exact 只有精确按下对应的按键才能触发的事件。

代码演示:

		const app = Vue.createApp({
            data(){
                return {
                    content: 0
                }
            },
            methods:{
                enterClick(){
                    console.log('只按enter键时点击触发')
                },
                altClick(){
                    console.log('只按alt键时点击触发')
                },
                ctrlClick(){
                    console.log('只按ctrl键时点击触发')
                }
            },
            template:`
            <div>
                <div class="content">
                    <!-- 只按enter键时点击触发 -->
                    <button @click.enter.exact='enterClick'>enter</button>
                </div>
                <div class="content">
                    <!-- 只按alt键时点击触发 -->
                    <button @click.alt.exact='altClick'>alt</button>
                </div>
                <div class="content">
                    <!-- 只按click键时点击触发 -->
                    <button @click.ctrl.exact='ctrlClick'>ctrl</button>
                </div>
		    </div>
                `
        })

页面效果: 在这里插入图片描述

结语

本小节到此结束,谢谢大家的观看!

如有问题欢迎各位指正

举报

相关推荐

0 条评论