Vue事件处理

事件的基本使用

直接上代码吧:

js 复制代码
<body>
    <div id="app">
        <h2>全民制作人们你们好,我是{{name}}</h2>
        <button v-on:click="showInfo1">点我显示提示信息(无参)</button>
        <button @click="showInfo2($event,fans)">点我显示提示信息(传参)</button>
    </div>
</body>
<script>
    new Vue({
        el:'#app',
        data:{
            name:'kunkun',
            fans:'ikun',
        },
        methods: {
            showInfo1(){
                alert('ikun你们好!')
            },
            showInfo2(event,fans){
                alert(fans+ '你们好!!')
            }
        },
    })
</script>

运行如上代码,分别查看两个按钮点击后的运行结果:

点击第一个按钮的运行结果: 点击第二个按钮的运行结果:

来波总结

  1. 在Vue中,使用v-on:fun@:fun绑定事件,后者写法更常用。其中,fun是事件名。v-on指令可以浅显的理解为当... ...的时候,那么v-on:click则是当点击的时候;
  2. event是事件对象,调用时的写法是$event
  3. 事件的回调需要配置在methods对象上,最终会在vm上;
  4. methods中配置的函数,不要使用箭头函数,否则this就不是vm了。
  5. methods中配置的函数,都是被Vue所管理的函数,this的指向是vm或组件实例对象;
  6. @click="demo"@click="demo($event)"效果一致,但后者可以传参。

事件修饰符

同样的,先上代码:

js 复制代码
<body>
    <div id="app">
        <h2>全民制作人们你们好,我是{{name}}</h2>
        <a href="https://t.hk.uy/b43p" @click="showInfo" >看看我的个人简介吧!</a>
    </div>
</body>
<script>
    new Vue({
        el:'#app',
        data:{
            name:'kunkun',
        },
        methods: {
            showInfo(){
                alert("你来啦~")
            }
        },
    })
</script>

运行如上代码,点击链接,会出现提示信息,随后就会跳转到该网址。

Q:那么如果我想要点击链接后不跳转该如何做呢?

A:在该事件后加入事件修饰符prevent即可。例如@click.prevernt="showInfo",该修饰符是用来阻止默认事件的。

再有如下代码:

js 复制代码
<body>
    <div id="app">
        <h2>全民制作人们你们好,我是{{name}}</h2>

        <div @click="showInfo">
            <button @click="showInfo">点我显示提示信息</button>
        </div>
    </div>
</body>
<script>
    new Vue({
        el:'#app',
        data:{
            name:'kunkun',
        },
        methods: {
            showInfo(e){
                alert("你来啦~")
            }
        },
    })
</script>

运行后点击按钮会发现提示框出现了两次,这是因为作为子元素的按钮的单击事件行为冒泡冒到了作为父元素的div盒子身上。

Q:那么如果我想要阻止事件冒泡该怎么做呢?

A:在该事件后加入事件修饰符stop即可。例如@click.stop="showInfo",该修饰符是用来阻止默认事件的,是加在子元素上的

Q:那么如果我想要该事件只触发一次该怎么做呢? (单击按钮后显示提示框,再次单击就不要提示了、)

A:在该事件后加入事件修饰符once即可。例如@click.once="showInfo",这样就能够做到让某个元素的事件只会触发一次了。

以上三个事件是常用事件,下面直接总结Vue中的事件修饰符:

  1. prevent:阻止默认事件(常用)
  2. stop:阻止事件冒泡(常用)
  3. once:事件只触发一次(常用)
  4. capture:使用事件的捕获模式
  5. self :只有event.target是当前操作元素时才触发事件
  6. passive:事件的默认行为立即执行。不用等待事件回调完毕

最后,修饰符是可以连用的,例如@click.prevent.stop


键盘事件

上一个小案例:

js 复制代码
<body>
    <div id="app">
        <h2>欢迎来到{{name}}</h2>、
        <input type="text" placeholder="按下回车提示输入" @keyup.enter="showInfo">
    </div>
</body>
<script>
    new Vue({
        el:'#app',
        data:{
            name:'Vue',
        },
        methods: {
            showInfo(e){
                console.log(e.target.value);
            }
        },
    })
</script>

运行打开浏览器控制台,输入123,然后按下回车,控制台就会将刚才的输入信息进行输出,如下:

在上面的代码中,keyup是键盘上按键的抬起事件,对应的有kewdown.enter是按键的别名。连起来的意思就是:当回车键抬起时,调用showInfo方法。

以下是Vue中常用的按键别名

按键 别名
回车 enter
删除 delete
退出 esc
空格 space
换行 tab
up
down
left
right

tab按键只能绑定keydown事件。

Q:那么如果我要绑定的按键没在这几个常用按键里该怎么做呢?

A:Vue未提供别名的按键,可以使用原始的key值去绑定(例如绑定回车就可以输入keyup.13),想要知道每个键的名字和对应的值,可以将上面代码的输出信息改为:console.log(e.key,e.keyCode);,当按键由两个字母组成时,要以短横线命名,例如大小写键CapsLock 就应改写为caps-lock

四个特殊的系统修饰键:ctrl、alt、shift、meta(win键)

  1. 配合keyup使用:按下修饰键的同时,再按下其它键,随后释放其它键,事件才会触发。
  2. 配合keydown使用:正常触发事件。
  3. 想要按下指定按键触发事件,也可以像事件修饰符那样连写。例如想要按下Ctrl+Y 触发事件则可以写成@keyup.ctrl.y="showInfo"

Tips:

  1. 可以使用keycode去指定具体的按键,但不推荐,今后可能会被废弃掉。
  2. 可以使用Vue.config.keyCodes.自定义键名 = 键码来定制按键别名。例如: Vue.config.keyCodes.huiche = 13

以上就是事件处理的全部内容咯~

相关推荐
Ten peaches27 分钟前
Selenium-Java版(环境安装)
java·前端·selenium·自动化
心.c39 分钟前
vue3大事件项目
前端·javascript·vue.js
姜 萌@cnblogs1 小时前
【实战】深入浅出 Rust 并发:RwLock 与 Mutex 在 Tauri 项目中的实践
前端·ai·rust·tauri
蓝天白云下遛狗1 小时前
google-Chrome常用插件
前端·chrome
多多*2 小时前
Spring之Bean的初始化 Bean的生命周期 全站式解析
java·开发语言·前端·数据库·后端·spring·servlet
linweidong2 小时前
在企业级应用中,你如何构建一个全面的前端测试策略,包括单元测试、集成测试、端到端测试
前端·selenium·单元测试·集成测试·前端面试·mocha·前端面经
满怀10152 小时前
【HTML 全栈进阶】从语义化到现代 Web 开发实战
前端·html
东锋1.32 小时前
前端动画库 Anime.js 的V4 版本,兼容 Vue、React
前端·javascript·vue.js
满怀10152 小时前
【Flask全栈开发指南】从零构建企业级Web应用
前端·python·flask·后端开发·全栈开发
小杨升级打怪中3 小时前
前端面经-webpack篇--定义、配置、构建流程、 Loader、Tree Shaking、懒加载与预加载、代码分割、 Plugin 机制
前端·webpack·node.js