当前位置: 首页 > news >正文

Vue组件:使用$emit()方法监听子组件事件

1、监听自定义事件

父组件通过使用 Prop 为子组件传递数据,但如果子组件要把数据传递回去,就需要使用自定义事件来实现。父组件可以通过 v-on 指令(简写形式“@”)监听子组件实例的自定义事件,而子组件可以通过调用内建的 $emit() 方法并传入事件名称来触发自定义事件。

组件之间的数据传递:

父传子:使用 Props 属性。

子传父:使用 $emit() 方法。

$emit() 方法的语法格式如下:

this.$emit( eventName, […args] )

参数说明:

eventName:传入事件的名称。

 […args]:触发事件传递的参数,该参数是非必选。

【实例】使用$emit()方法,实现子组件向父组件传递事件。

(1)创建 ParentComponent.vue 父组件

<template><fieldset><legend>父组件</legend><h3>父组件接收到子组件传递的数据:</h3><p>博客信息:{{ blogName }}</p><p>博客信息:{{ blogUrl }}</p><!-- 第三步:使用组件 --><ChildComponent @receiverData="getBlogInfo" /></fieldset>
</template><script>
//第一步:引用组件
import ChildComponent from '@/components/ChildComponent.vue'export default {data() {return {blogName: '',blogUrl: ''}},//第二步:注册组件components: {ChildComponent,},//方法methods: {getBlogInfo: function (blogName, blogUrl) {this.blogName = blogName;this.blogUrl = blogUrl;}}
}
</script>

(2)创建 ChildComponent.vue 子组件

<template><fieldset><legend>子组件</legend><button @click="sendData">传递数据给父组件</button></fieldset>
</template><script>
export default {data() {return {blogName: '您好,欢迎访问 pan_junbiao的博客',blogUrl: 'https://blog.csdn.net/pan_junbiao'}},methods: {sendData: function () {// 核心代码:使用 $emit() 方法this.$emit('receiverData', this.blogName, this.blogUrl);}}
}
</script>

(3)在 App.vue 根组件中,引入父组件

<template><!-- 第三步:使用组件 --><ParentComponent />
</template><script>
//第一步:引用组件
import ParentComponent from '@/components/ParentComponent.vue'export default {//第二步:注册组件components: {ParentComponent,}
}
</script><style></style>

执行结果:

2、组件事件配合 v-model 指令

如果是在子组件中用户输入数据,我们希望在获取数据的同时发生数据给父组件,这是可以配合 v-model 指令使用。

【实例】子组件中用户输入数据,在父组件中实时获取数据。

(1)修改 ParentComponent.vue 父组件

<template><fieldset><legend>父组件</legend><!-- 第三步:使用组件 --><ChildComponent @searchEvent="getSearch" /><h3>父组件接收到子组件传递的数据:</h3>接收到的搜索关键字:<input type="text" v-model="search" /></fieldset>
</template><script>
//第一步:引用组件
import ChildComponent from '@/components/ChildComponent.vue'export default {data() {return {search: ''}},//第二步:注册组件components: {ChildComponent,},//方法methods: {getSearch: function (keyword) {this.search = keyword;}}
}
</script><style>
input {width: 300px;padding: 3px;font-size: 16px;
}
</style>

(2)修改 ChildComponent.vue 子组件

<template><fieldset><legend>子组件</legend>搜索:<input type="text" v-model="search" /></fieldset>
</template><script>
export default {data() {return {search: ''}},// 监听器watch: {search(newValue, oldValue) {// 核心代码:使用 $emit() 方法this.$emit('searchEvent', newValue);}}
}
</script>

执行结果:

http://www.lryc.cn/news/433949.html

相关文章:

  • 数据分析-埋点
  • 【文心智能体】通过工作流使用知识库来实现信息查询输出,一键查看旅游相关信息,让出行多一份信心
  • 服务器监控工具都是监控服务器的哪些性能和指标
  • 不小心删除丢失了所有短信?如何在 iPhone 上查找和恢复误删除的短信
  • 【skyvern 快速上手】一句话让AI帮你实现爬虫+自动化
  • 【C++ Primer Plus习题】14.1
  • 在Ubuntu上运行QtCreator相关程序
  • MybatisPlus 快速入门
  • Java.lang中的String类和StringBuilder类介绍和常用方法
  • notepad++软件介绍(含安装包)
  • chapter13-常用类——(章节小结)——day17
  • RTX AI PC 和工作站上部署多样化 AI 应用支持 Multi-LoRA
  • C++ STL-deque容器入门详解
  • 数据结构之折半查找
  • linux高级学习12
  • leetcode:3174 清除数字 使用栈,时间复杂度O(n)
  • 神经网络卷积操作
  • 专题二_滑动窗口_算法专题详细总结
  • 【机器学习-三-无监督学习】
  • JAVA基础:Lambda表达式(上)
  • Vue使用fetch获取本地数据
  • 《酒饮真经》秘籍4,让你的酒场技巧更上一层楼!
  • 回车符与快捷键记录
  • 计算机网络-VRRP工作原理
  • 6.5椒盐噪声
  • CSS样式的引用方式以及选择器使用
  • Python Flask_APScheduler定时任务的正确(最佳)使用
  • Linux命名管道
  • Xinstall助力App全渠道统计,参数传递下载提升用户体验!
  • 【时时三省】(C语言基础)指针进阶 例题4