vue组件通信的八种方式

本文详细介绍了Vue组件通信的八种方式:props/$emit用于父子组件通信,$children/$parent提供直接访问,provide/inject实现跨级通信,ref/refs直接访问组件实例,eventBus作为事件中心,Vuex管理全局状态,以及localStorage/sessionStorage进行数据持久化。每种方式的优缺点和使用场景均有阐述。
摘要由CSDN通过智能技术生成

一、props / $emit

父组件通过props的方式向子组件传递数据,而通过$emit 子组件可以向父组件通信。

1. 父组件向子组件传值

下面通过一个例子说明父组件如何向子组件传递数据:在子组件article.vue中如何获取父组件section.vue中的数据articles:[‘红楼梦’, ‘西游记’,‘三国演义’]

在这里插入代码片
// section父组件
<template>
 <div class="section">
 //子组件元素--插入
 <com-article :articles="articleList"></com-article>
 </div>
</template>
 
<script>
import comArticle from './test/article.vue' //引入子组件
export default {
   
 name: 'HelloWorld',
 components: {
    comArticle },
 data() {
   
 return {
   
 articleList: ['红楼梦', '西游记', '三国演义']
 }
 }
}
</script>
在这里插入代码片
// 子组件 article.vue
<template>
 <div>
 <span v-for="(item, index) in articles" :key="index">{
   {
   item}}</span>//即是红楼梦 西游记 三国演义
 </div>
</template>
 
<script>
export default {
   
 props: ['articles']
}
</script>

总结: prop 只可以从上一级组件传递到下一级组件(父子组件),即所谓的单向数据流。而且 prop 只读,不可被修改,所有修改都会失效并警告。

2. 子组件向父组件传值

对于$emit 我自己的理解是这样的: $emit绑定一个自定义事件, 当这个语句被执行时, 就会将参数arg传递给父组件,父组件通过v-on监听并接收参数。 通过一个例子,说明子组件如何向父组件传递数据。
在上个例子的基础上, 点击页面渲染出来的ariticle的item, 父组件中显示在数组中的下标

在这里插入代码片
// 父组件中
<template>
 <div class="section">
 <com-article :articles="articleList" @onEmitIndex="onEmitIndex"></com-article>
 <p>{
   {
   currentIndex}}</p>
 </div>
</template>
 
<script>
import comArticle from './test/article.vue'
export default {
   
 name: 'HelloWorld',
 components: {
    comArticle },
 data() {
   
 return {
   
 currentIndex: -1,
 articleList: ['红楼梦', '西游记', '三国演义']
 }
 },
 methods: {
   
 onEmitIndex(idx) {
   
 this.currentIndex = idx
 }
 }
}
</script>
在这里插入代码片
<template>
 <div>
 <div v-for="(item, index) in articles" :key="index" @click="emitIndex(index)">{
   {
   item}}</div>
 </div>
</template>
 
<script>
export default {
   
 props: ['articles'],
 methods: {
   
 emitIndex(index) {
   
 this.$emit('onEmitIndex', index)
 }
 }
}
</script>

二、 $children / $parent

使用前提是指定已建立父子关系,子实例可以用this. p a r e n t 访 问 父 实 例 , 子 实 例 被 推 入 父 实 例 的 parent访问父实例,子实例被推入父实例的 parent访children数组中
注意:节制使用 p a r e n t 和 parent和 parentchildren 它们主要的目的是作为访问组件的应急方法。更推荐用props和events实现父子组件的通信

在这里插入代码片
// 父组件中
<<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值