首页 > 其他分享 >VUE父子组件如何通信

VUE父子组件如何通信

时间:2024-09-12 14:02:49浏览次数:13  
标签:VUE default 父子 export import 组件 ChildComponent Vuex

在 Vue.js 中,父子组件之间的通信有多种方式。以下是几种常见的方法:

1. 通过 Props 传递数据(父组件向子组件)

父组件可以通过 props 将数据传递给子组件。这是父子组件之间最常见的通信方式。

<!-- ParentComponent.vue -->
<template>
  <ChildComponent :message="parentMessage" />
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: { ChildComponent },
  data() {
    return {
      parentMessage: 'Hello from Parent!'
    };
  }
};
</script>
<!-- ChildComponent.vue -->
<template>
  <div>{{ message }}</div>
</template>

<script>
export default {
  props: {
    message: String
  }
};
</script>

2. 通过自定义事件(子组件向父组件)

子组件可以通过 $emit 方法向父组件发送事件,父组件可以在子组件上监听这些事件。

<!-- ParentComponent.vue -->
<template>
  <ChildComponent @childEvent="handleChildEvent" />
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: { ChildComponent },
  methods: {
    handleChildEvent(data) {
      console.log('Received from child:', data);
    }
  }
};
</script>
<!-- ChildComponent.vue -->
<template>
  <button @click="sendToParent">Send to Parent</button>
</template>

<script>
export default {
  methods: {
    sendToParent() {
      this.$emit('childEvent', 'Hello from Child!');
    }
  }
};
</script>

3. 使用 Vuex(全局状态管理)

当组件间的通信变得复杂时,可以使用 Vuex 来管理应用的全局状态。通过 Vuex,任何组件都可以访问和更新全局状态。

// store.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    message: ''
  },
  mutations: {
    setMessage(state, payload) {
      state.message = payload;
    }
  }
});

在组件中使用 Vuex:

<!-- ParentComponent.vue -->
<template>
  <ChildComponent />
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: { ChildComponent }
};
</script>
<!-- ChildComponent.vue -->
<template>
  <input v-model="message" @input="updateMessage" />
</template>

<script>
import { mapState, mapMutations } from 'vuex';

export default {
  computed: {
    ...mapState(['message'])
  },
  methods: {
    ...mapMutations(['setMessage']),
    updateMessage() {
      this.setMessage(this.message);
    }
  }
};
</script>

4. 通过插槽 (Slots)

父组件可以通过插槽将内容传递给子组件,这是一种灵活的组件组合方式。

<!-- ParentComponent.vue -->
<template>
  <ChildComponent>
    <p>This is content from the parent!</p>
  </ChildComponent>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: { ChildComponent }
};
</script>
<!-- ChildComponent.vue -->
<template>
  <div>
    <slot></slot>
  </div>
</template>

总结

  • Props: 从父组件传递数据到子组件。
  • 自定义事件: 从子组件向父组件发送消息。
  • Vuex: 用于全局状态管理,适合复杂组件间的通信。
  • 插槽: 用于组件内容的灵活传递。

根据应用需求选择适合的通信方式,可以更好地管理组件之间的关系。

标签:VUE,default,父子,export,import,组件,ChildComponent,Vuex
From: https://www.cnblogs.com/love-DanDan/p/18410066

相关文章

  • 解决vue3 useRoute无法获取get参数记录
    总结:使用route.query无法获取到get参数,开发模式代码改动能拿到,但是刷新又没了,需要监听route.query才能拿到get参数。正文:我的常规使用方法:先安装vue-routernpminstallvue-router@next创建src/router/index.js:import{createRouter,createWebHistory}from'vue-rou......
  • Vue3学习
    Vue3学习Vue3学习(一)——创建Vue3工程1.安装Node.js首先,确保你的系统上已经安装了Node.js。你可以通过运行以下命令检查:node-vnpm-v2.使用Vite创建Vue3项目在终端(命令行)中,运行以下命令来创建一个新的Vue3项目:npmcreatevite@latestmy-vue-app----temp......
  • 【开源免费】基于SpringBoot+Vue.JS在线视频教育平台(JAVA毕业设计)
    本文项目编号T027,文末自助获取源码\color{red}{T027,文末自助获取源码}......
  • 【开源免费】基于SpringBoot+Vue.JS校园管理系统(JAVA毕业设计)
    本文项目编号T026,文末自助获取源码\color{red}{T026,文末自助获取源码}......
  • vue3兄弟组件间的通信 mitt
    1、安装插件npmimitt-s2、在scr下的utils文件创建mitt.ts文件/***@author*@date20240912*@descriptionCreate$bus,使用方式$bus.emit/$bus.on**/importmittfrom'mitt'const$bus=mitt()exportdefault$bus两个子组件都引入mitt.js文件3、......
  • vite如何打包vue3插件为JSSDK
    安装vitenpmcreatevite@latest你还可以通过附加的命令行选项直接指定项目名称和你想要使用的模板。例如,要构建一个Vite+Vue+ts项目,运行:#npm7+,需要添加额外的--:npmcreatevite@latestmy-vue-app----templatevue-ts查看create-vite以获取每个模板的更多细......
  • vue优点/插值表达式/强制绑定
    1.Vue.js的优点体积小:压缩后只有33k;更高的运行效率:基于虚拟DOM,一种可以预先通过JavaScript进行各种计算,把最终的DOM操作计算出来并优化的技术,由于这种DOM操作属于预处理操作,并没有真实的操作DOM,所以叫做虚拟DOM;双向数据绑定:让开发者不用再去操作DOM对象,把更多的精力投入到业务......
  • 锋哥写一套前后端分离Python权限系统 基于Django5+DRF+Vue3.2+Element Plus+Jwt 视频
    大家好,我是java1234_小锋老师,最近写了一套【前后端分离Python权限系统基于Django5+DRF+Vue3.2+ElementPlus+Jwt】视频教程,持续更新中,计划月底更新完,感谢支持。视频在线地址:打造前后端分离Python权限系统基于Django5+DRF+Vue3.2+ElementPlus+Jwt视频教程(火爆连载更新中......
  • springboot+vue州州购【程序+论文+开题】计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,电子商务已成为推动全球经济增长的重要引擎。在“新零售”概念的引领下,消费者对于购物体验的需求日益多元化和个性化,传统零售模式正面临前所未有的挑战与机遇。在此背景下,“州州购”应运而生,旨在打造一个集地......
  • springboot+vue新疆IP形象NFT藏品网站【程序+论文+开题】计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着区块链技术的迅猛发展与数字经济的崛起,非同质化代币(NFT)作为一种全新的数字资产形式,正逐步改变着艺术品、收藏品乃至文化产业的传统格局。新疆,作为中国多元文化的瑰宝之地,其丰富的民族文化、自然风光及历史故事为NFT创作提供了无尽......