Vue2 与 Vue3 中兄弟组件之间传值方法详解

目录

Vue2 与 Vue3 中兄弟组件之间传值方法详解

一、Vue2 中兄弟组件传值

1. 创建兄弟组件

2. 创建中转文件bus.js

二、Vue3 中兄弟组件传值

1. 创建兄弟组件

三、总结


在 Vue 开发中,兄弟组件之间的传值是一个常见的需求。本文将详细介绍在 Vue2 和 Vue3 中实现兄弟组件之间传值的方法,并附上相关代码示例。

一、Vue2 中兄弟组件传值

在 Vue2 中,兄弟组件之间没有直接的传值方式,通常需要通过一个中转来实现,这个中转在视频中被称为bus

1. 创建兄弟组件

首先创建几个兄弟组件,比如home组件、HANDER组件和Footer组件。

<!-- Home.vue -->
<template>
  <div>
    <HANDER></HANDER>
    <Footer></Footer>
  </div>
</template>

<script>
import HANDER from './HANDER.vue';
import Footer from './Footer.vue';

export default {
  components: {
    HANDER,
    Footer
  }
};
</script>

<!-- HANDER.vue -->
<template>
  <div>
    <button @click="goFooter">传值给 Footer</button>
  </div>
</template>

<script>
import bus from '../bus.js';

export default {
  data() {
    return {
      date: {
        MSG: '兄弟数据'
      }
    };
  },
  methods: {
    goFooter() {
      bus.$emit('toFooter', this.date);
    }
  }
};
</script>

<!-- Footer.vue -->
<template>
  <div>{{ MSG }}</div>
</template>

<script>
import bus from '../bus.js';

export default {
  data() {
    return {
      MSG: ''
    };
  },
  mounted() {
    bus.$on('toFooter', (data) => {
      this.MSG = data.MSG;
    });
  }
};
</script>

2. 创建中转文件bus.js

src目录下新建一个公共文件目录,在其中创建bus.js文件。

import Vue from 'vue';

export default new Vue();

通过以上步骤,在 Vue2 中实现了兄弟组件之间的传值。点击HANDER组件中的按钮,会将数据传递给Footer组件并显示。

二、Vue3 中兄弟组件传值

在 Vue3 中,兄弟组件之间的传值方法有所不同。可以使用provideinject来实现兄弟组件之间的传值。

1. 创建兄弟组件

以下是使用provideinject实现兄弟组件传值的示例代码。

<!-- Home.vue -->
<template>
  <div>
    <HANDER></HANDER>
    <Footer></Footer>
  </div>
</template>

<script>
import HANDER from './HANDER.vue';
import Footer from './Footer.vue';

export default {
  components: {
    HANDER,
    Footer
  }
};
</script>

<!-- HANDER.vue -->
<template>
  <div>
    <button @click="goFooter">传值给 Footer</button>
  </div>
</template>

<script>
import { provide } from 'vue';

export default {
  data() {
    return {
      date: {
        MSG: '兄弟数据'
      }
    };
  },
  methods: {
    goFooter() {
      provide('sharedData', this.date);
    }
  }
};
</script>

<!-- Footer.vue -->
<template>
  <div>{{ MSG }}</div>
</template>

<script>
import { inject } from 'vue';

export default {
  data() {
    return {
      MSG: ''
    };
  },
  setup() {
    const sharedData = inject('sharedData');
    if (sharedData) {
      return {
        MSG: sharedData.MSG
      };
    }
    return {
      MSG: ''
    };
  }
};
</script>

通过在HANDER组件中使用provide提供数据,在Footer组件中使用inject注入数据,实现了兄弟组件之间的传值。

三、总结

无论是在 Vue2 还是 Vue3 中,兄弟组件之间的传值都需要通过一定的方式来实现。在 Vue2 中,可以使用bus作为中转来传递数据;而在 Vue3 中,可以使用provideinject来实现兄弟组件之间的传值。这些方法各有优缺点,开发者可以根据实际情况选择适合的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值