Vue2:给组件绑定自定义事件

一、场景描述

我们在页面开发中,难免要使用事件。

在之前的学习中,我们学过@click、@keyup、@change等事件,这些是Vue自带的事件。

它的使用前提是,只能用在原生的HTML元素上。

比如:

html 复制代码
h1绑定一个click事件。
<h1 @click="test">你好</h1>
iput绑定一个keyup事件.
<input type="text" @keyup.enter="add"/>

这一篇说的自定义事件,可以绑定到我们自己的Vue组件上。

实现子组件给父组件传递数据的功能。

比如:

html 复制代码
<School :getSchoolName="getSchoolName"/>

二、绑定自定义事件

方式1

使用@或v-on方式绑定自定义事件

App父组件中:

模板代码:

html 复制代码
 <Student @test="getStudentName"/>

methods函数:

js 复制代码
getStudentName(name,...params){
    console.log('App收到了学生名:',name,params)
}

Student子组件中:

模板代码:

html 复制代码
<button @click="sendStudentlName">把学生名给App</button>

methods函数:

js 复制代码
//触发Student组件实例身上的test事件	传递多个参数
this.$emit('test',this.name,666,888,900)

方式2

使用ref方式绑定自定义事件
App父组件中:

模板代码:

html 复制代码
<Student ref="student"/>

mounted属性:

js 复制代码
        mounted() {
            //设置三秒后再绑定事件
            // setTimeout(() => {
            //     this.$refs.student.$on('test',this.getStudentName) //绑定自定义事件    第一个参数是事件名称,第二个参数是函数名称
            // },3000);
            // this.$refs.student.$on('test',this.getStudentName) //绑定自定义事件    第一个参数是事件名称,第二个参数是函数名称
            this.$refs.student.$once('test',this.getStudentName) //绑定自定义事件(一次性)
        }

Student子组件中:

和方式1相同

三、总结

原则:给那个组件的vc实例绑定事件,就由那个组件的vc实例来触发事件

相对来讲,第二种方法更灵活,第一种方法更简便,各有优势,视具体情况选择使用。

相关推荐
qq_25183645729 分钟前
理发管理系统 —— 会员模块
开发语言·前端·python·flask
Dovis(誓平步青云)32 分钟前
几个方案来回选不定?做一个随时切换的候选推荐页
android·java·服务器·开发语言·javascript·数据库·智能化
Frag0ut1 小时前
2027 年浏览器展望:Chrome 与 Edge 的 AI 智能体进化方向
前端·人工智能·chrome·edge·浏览器·新功能
计算机魔术师1 小时前
从AI绘图鼻祖到音乐版权破局者,Stability AI如何被三大唱片巨头「收编」
前端
奕鼎竜瑆2 小时前
Chrome 插件开发实战指南:从入门到发布
前端·chrome
广州华水科技2 小时前
水库北斗GNSS变形监测系统及单北斗形变监测一体机应用解析
前端
可乐鸡翅yeah_2 小时前
fmp4 碎片 MP4 格式 HLS 流,和传统 TS 分片有什么不一样
开发语言·javascript·ios·音视频·safari·m3u8·m3u8在线播放
anew___3 小时前
《从零手写操作系统 (20):ELF加载器——让OS读懂现代编译器》
java·服务器·前端
ss2733 小时前
AI全栈实战 | 2.3-01 组件库实战:Element Plus 怎么搭出专业界面,过度封装为什么成维护负担
前端·javascript·elementui·vue
对空六课3 小时前
动态按钮ID变化时的稳定埋点标识设计
前端·数据分析