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

Vue2组件通信

目录

  • 【props】
  • 【$emit】
  • 【Event Bus】
  • 【provide和inject】
  • 【Vuex】

【props】

父组件通过props向子组件传递数据;

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

<!-- 子组件 -->
<template>
  <div>{{ message }}</div>
</template>
<script>
export default {
  props: ['message'],
};
</script>

【$emit】

子组件通过$emit触发事件,父组件监听事件并处理数据;

<!-- 子组件 -->
<template>
  <button @click="sendMessage">Send Message</button>
</template>
<script>
export default {
  methods: {
    sendMessage() {
      this.$emit('message-from-child', 'Hello from Child');
    },
  },
};
</script>

<!-- 父组件 -->
<template>
  <ChildComponent @message-from-child="handleMessage" />
</template>
<script>
import ChildComponent from './ChildComponent.vue';
export default {
  components: { ChildComponent },
  methods: {
    handleMessage(message) {
      console.log(message); // 输出: Hello from Child
    },
  },
};
</script>

【Event Bus】

创建一个全局事件总线,兄弟组件通过事件总线通信;

// eventBus.js
import Vue from 'vue';
export const EventBus = new Vue();

// 组件 A
EventBus.$emit('message', 'Hello from A');

// 组件 B
EventBus.$on('message', (message) => {
  console.log(message); // 输出: Hello from A
});

【provide和inject】

祖先组件通过 provide 提供数据,后代组件通过 inject 注入数据;

// 祖先组件
export default {
  provide() {
    return {
      message: 'Hello from Ancestor',
    };
  },
};

// 后代组件
export default {
  inject: ['message'],
};

【Vuex】

Vuex 是 Vue 2 的官方状态管理工具;

// store.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
  state: { message: 'Hello from Vuex' },
  mutations: {
    setMessage(state, message) {
      state.message = message;
    },
  },
});

// 组件
export default {
  computed: {
    message() {
      return this.$store.state.message;
    },
  },
  methods: {
    updateMessage() {
      this.$store.commit('setMessage', 'New Message');
    },
  },
};
http://www.dtcms.com/a/16866.html

相关文章:

  • 工作流改造:从一到千
  • 网络安全用centos干嘛 网络安全需要学linux吗
  • DBSCAN 基于密度的空间带噪聚类法
  • LM Studio纯CPU运行大模型不如ollama效率高
  • jenkins服务启动-排错
  • 数组_二分查找
  • Android-构建问题记录
  • Java版PDF拼接
  • 配查查:解锁商业奥秘,赋能智慧决策
  • OpenEuler学习笔记(三十二):在OpenEuler上搭建项目管理平台
  • django静态文件配置
  • Neo4j OGM学习和体验
  • Linux中安装open-webui报sqlite版本低的解决办法
  • 【React组件通讯双重视角】函数式 vs 类式开发指南
  • 第二章:基础概念精讲 - 第二节 - Tailwind CSS 颜色系统和主题定制
  • 什么是环形分区光源
  • Edge浏览器清理主页
  • 【漫话机器学习系列】092.模型的一致性(Consistency of a Model)
  • 4.SpringSecurity在分布式环境下的使用
  • ai智能电话机器人话术处理,呼叫系统部署语音话术设置
  • 《DeepSeek R1:7b 写一个python程序调用摄像头获取视频并显示》
  • 标贝科技参编国内首个AIGC大模型功能测试标准
  • 反向代理模块
  • 蓝桥杯(B组)-每日一题
  • DeepSeek R1 671b 满血版部署笔记
  • hbase快照同步到目标集群出现ERROR Multiple regions have the same startkey问题分析
  • Django学习笔记(第一天:Django基本知识简介与启动)
  • 仿 RabbitMQ 消息队列5(实战项目)
  • Pycharm中通过Anaconda虚拟环境创建项目
  • Lean 工具链教程 | Lake elan