vue中兄弟组件之间传值

4 篇文章 0 订阅
2 篇文章 0 订阅

兄弟组件之间的传值,使得兄弟组件之间可以联动,相互操作

方法一:子传父,父传子

我们知道,兄弟组件上面肯定有一个父组件,那么你想一下,我们可以将子组件的值用$ eimt方法传递给父组件(当然还有很多方法,比如$parent.xxx,当然xxx为父组件的一个函数)小编专门做了一期组建之间的传值,不会的小伙伴可以去看看,也可以将父组件的值用prop方法传递给子组件。想一下,经过这么峰回路转,是不是可以将兄弟A组件的值传递给父组件,然后父组件又可以将值传递给子组件B呢,来,上代码

组件A:

<template>
  <div class="ul">
  </div>
</template>

<script>
export default {
  name: 'A',
  data() {
    return {
      todos: [
        {id: '001', name: '吃饭', isOk: false},
      ],
    };
  },
  mounted() {
    this.$emit('dataAll',this.todos) //$emit传两个参数,第一个为父组件的自定义事件,第二个参数就是要带过去的值
  },
};
</script>

<style scoped>
</style>
父组件:
<template>
  <div id="app">
    <A @dataAll = 'dataAll'></A> //自定义一个事件
    <B :todoB="todosApp"></B>
  </div>
</template>
<script>
import B from './components/B';
import A from './components/A';
export default {
  name: 'App',
  components: {AB},
  data() {
    return {
      todosApp: [],
    };
  },
  methods: {
    dataAll(val) {
      this.todosApp = val;
      console.log(val) //当然这里输出的是子组件穿过来的todos
    },
  },
};
</script>
组件B
<template>
  <div>
  <!-- todoB.name = 吃饭 -->
  {{todoB.name}}
  </div>
</template>

<script>
export default {
  name: 'B',
  props:['todoB'],
};
</script>

<style scoped>
</style>>

以上代码看懂了吗小伙伴,我们实现了A组件与B组件之间的通讯

方法二:bus总线传值

思路:在Vue的原型上创建一个属性bus,该属性的值为new Vue(),即bus也是一个vue实例

  1. 在main.js中创建总线
main.js:

Vue.prototype.bus = new Vue()
  1. 在子组件A中抛出信息和值,this.bus就是vue的实例,$emit也是上面的方法
<template>
  <div class="ul" @click='pop'>
  </div>
</template>

<script>
export default {
  name: 'A',
  data() {
    return {
      todos: [
        {id: '001', name: '吃饭', isOk: false},
      ],
    };
  },
  methods() {
	pop(){
	  this.bus.$emit('todosAll',this.todos) 
   }
  },
};
</script>

<style scoped>
</style>
  1. 在子组件B中,在生命周期函数上获取传过来的值
<template>
  <div>
  </div>
</template>

<script>
export default {
  name: 'B',
  mounted(){
  	this.bus.$on('todosAll',res => {
		console.log(res) // 输出的是A组件传过来的{id: '001', name: '吃饭', isOk: false}
	})
  }
};
</script>

<style scoped>
</style>>

注意:当组件A中的bus触发,那么组件B中就会相应是触发,B组件中的bus,必须是在函数里面,比如生命周期函数,甚至data函数里面也是可以的。

小伙伴们,你们学废了吗哈哈哈,欢迎各位大神多多提宝贵意见。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue3兄弟组件之间传值可以通过以下方式实现: 1. 使用事件总线(Event Bus) 事件总线是一种通信方式,可以在Vue应用程序跨越多个组件进行通信。在Vue3,可以使用`mitt`库来实现事件总线。首先在项目安装`mitt`库: ``` npm install mitt ``` 然后在需要进行通信的组件创建一个事件总线实例: ```javascript import mitt from 'mitt' const eventBus = mitt() ``` 在发送方组件使用`eventBus.emit()`方法触发事件: ```javascript eventBus.emit('eventName', eventData) ``` 在接收方组件使用`eventBus.on()`方法监听事件并获取数据: ```javascript eventBus.on('eventName', eventData => { // 处理数据 }) ``` 2. 使用provide/inject `provide/inject`是Vue3提供的一种依赖注入方式,可以在父组件向子组件传递数据。使用`provide`方法在父组件提供数据: ```javascript import { provide } from 'vue' provide('dataName', data) ``` 在子组件使用`inject`方法注入数据: ```javascript import { inject } from 'vue' const data = inject('dataName') ``` 3. 使用vuex vuex是Vue的状态管理库,可以在Vue应用程序进行集式管理。在Vuex,可以通过`state`的数据来实现兄弟组件之间的通信。在发送方组件使用`this.$store.commit()`方法触发`mutation`来修改`state`的数据: ```javascript this.$store.commit('mutationName', data) ``` 在接收方组件使用`mapState`方法映射`state`的数据: ```javascript import { mapState } from 'vuex' ...mapState({ stateName: state => state.dataName }) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liux-

你的鼓励很重要

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值