当前位置: 首页 > 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');
    },
  },
};

相关文章:

  • 工作流改造:从一到千
  • 网络安全用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智能电话机器人话术处理,呼叫系统部署语音话术设置
  • 海南保亭警方通报“两飞车党紧追女童”:两名初中生认错道歉
  • 中国新闻发言人论坛在京举行,郭嘉昆:让中国声音抢占第一落点
  • 广西百色“致富果”:高品质芒果直供香港,带动近五千户增收
  • 定制基因编辑疗法治愈罕见遗传病患儿
  • 车主质疑零跑汽车撞车后AEB未触发、气囊未弹出,4S店:其把油门当刹车
  • 手机表面细菌菌落总数可能比马桶高10倍,医生详解如何洗手