vue中组件通信

devtools/2024/9/22 12:12:51/

父传子

方法一:

通过props传递

  1. 在父组件的模板中使用子组件,并通过属性绑定传值
  2. 在子组件中使用 props 接收数据
  3. 父组件的数据 parentValue 通过 :myProp 传递给子组件,子组件可以通过 this.myProp 访问这个值
javascript">// 父组件
<template><MyChild :myProp="parentValue" />
</template><script>
import MyChild from "./MyChild.vue";
export default {components: { MyChild },data() {return {parentValue: "Hello from parent!",};},
};
</script>
javascript">// 子组件
export default {props: {myProp: {type: String,required: true,},},
};

方法二:

在父组件中使用 `provide` 提供值,在子组件中使用 `inject` 注入值

javascript">// 父组件
<template><Child />
</template><script>
export default {provide() {return {sharedValue: this.sharedValue,};},data() {return { sharedValue: "初始值" };},
};
</script>
javascript">// 子组件
<template><div>{{ sharedValue }}</div>
</template><script>
export default {inject: ["sharedValue"],
};
</script>

 子传父

  1. 在子组件中使用 `$emit` 方法触发自定义事件,并传递数据
  2. 在父组件的模板中,使用 `v-on` 或 `@` 绑定子组件的事件
  3. 父组件通过事件处理函数接收子组件传来的数据
javascript">// 子组件
<template><button @click="sendValue">Send to Parent</button>
</template><script>
export default {methods: {sendValue() {this.$emit("childEvent", "Hello from child!");},},
};
</script>
javascript">// 父组件
<template><MyChild @childEvent="handleChildEvent" />
</template><script>
import MyChild from "./MyChild.vue";
export default {components: { MyChild },methods: {handleChildEvent(value) {console.log(value); // 处理从子组件传来的值},},
};
</script>

兄弟组件通信

方法一:

使用 Event Bus(事件总线),适用于较小的应用

  1. 创建一个中央事件总线,用于兄弟组件之间的通信
  2. 组件A触发事件
  3. 组件B监听事件
  4. 移除监听事件(可选)
javascript">// eventBus.js
import Vue from 'vue';
export const EventBus = new Vue();
javascript">// BrotherA.vue
import { EventBus } from './eventBus';EventBus.$emit('dataFromA', 'Hello from A');
javascript">// BrotherB.vue
import { EventBus } from './eventBus';EventBus.$on('dataFromA', (data) => {console.log(data);
});

为了避免在监听时,事件被反复触发,通常需要在页面销毁时移除监听事件;

或者在开发过程中,由于热更新,事件可能会被多次绑定监听,这时也需要移除事件监听

javascript">EventBus.$off('dataFromA');

也可以将EventBus绑定到vue实例的原型上,使用的时候就不用引入文件了,直接this.$EventBus

javascript">//main.js
Vue.prototype.$EventBus = new Vue();

方法二:

兄弟组件通过 `$emit` 向父组件发送事件,父组件更新状态并将新值传递给兄弟组件

方法三:

使用 Vuex 状态管理库,将共享状态存储在 Vuex 中,兄弟组件通过 Vuex 获取和更新状态(适用于大型应用)

父子组件共享一个值

javascript">// 父组件
<template><Child :curr-page.sync="currPage" />
</template><script>
export default {data() {return {currPage: 1,};},
};
</script>
javascript">// 子组件
export default {props: {currPage: {type: Number,default: 1,}},data() {return {currentPage: this.currPage,}},watch: {currentPage() {this.$emit('update:currPage', this.currentPage);}}
};

http://www.ppmy.cn/devtools/115451.html

相关文章

新峰商城之分类三级联动实现

新峰商城是一个开源电子商务网站&#xff08;SpringBoot项目&#xff09;&#xff0c;本文主要简述它的商品分类中三级联动功能的实现。 一、多层级联动效果的常见场景 二、三级联动或者更多层级的数据联动是常见交互方式&#xff0c;它可以提升用户体验&#xff0c;限制用户随…

浅谈Tair缓存的三种存储引擎MDB、LDB、RDB

文章目录 什么是TairTair的三种引擎对比1.MDB2.LDB3.RDB 什么是Tair Tair是阿里巴巴自主研发的高性能、分布式、可扩展、高可靠的 key/value 存储系统。 一般我们可能会认为是阿里开发的加强版Redis&#xff0c;支持双向数据同步&#xff0c;能够很好的支持缓存异地多中心&…

智能工厂的设计软件 之 语言设计 之 一个通用的信息系统的架构以及其构建基础 之1

Q1、今天我们继续 “智能工厂的设计软件”的“程序”语言设计。 回顾-昨天将“程序”所指的software&#xff0c;application &#xff0c;source视为程序语言三种方言&#xff0c;具有固定的语法句子(简化后的)&#xff1a; <『Free』> Private Behavior ((()))(τ,δ,…

TensorRT-LLM——优化大型语言模型推理以实现最大性能的综合指南

引言 随着对大型语言模型 (LLM) 的需求不断增长&#xff0c;确保快速、高效和可扩展的推理变得比以往任何时候都更加重要。NVIDIA 的 TensorRT-LLM 通过提供一套专为 LLM 推理设计的强大工具和优化&#xff0c;TensorRT-LLM 可以应对这一挑战。TensorRT-LLM 提供了一系列令人印…

django+vue

1. diango 只能加载静态js&#xff0c;和flask一样 2. 关于如何利用vue创建web&#xff0c;请查看flask vue-CSDN博客 3. 安装django pip install django 4. 创建新项目 django-admin startproject myproject 5.django 中可以包含多个app 5.1 创建一个app cd myprojec…

股指期货的详细玩法功能与应用解析

股指期货作为一种重要的金融衍生工具&#xff0c;为投资者提供了多样化的投资和风险管理手段。本文将详细探讨股指期货的三大主要功能&#xff1a;风险规避、价格发现和资产配置。 第一&#xff0c;风险规避功能 1.套期保值&#xff1a;股指期货的风险规避功能主要通过套期保值…

Netty+HTML5+Canvas 网络画画板实时在线画画

采用Html5的canvas做前端画画板&#xff0c;发送数据到后端Netty服务&#xff0c;实时转发笔迹数据&#xff0c;在线实时同步画笔轨迹&#xff0c;单击绿色小方块&#xff0c;保存画板的图片 页面&#xff1a; <!-- index.html --><!DOCTYPE html> <html> …

怎么让Nginx可以访问某一IP的每个后台controller接口

http { upstream backend { server 192.168.1.10; # 后端服务器IP } server { listen 80; location /controller1/ { ##proxy_pass http://localhost:801; proxy_pass http://backend/controller1/; # 后端controller1…