前端经典面试题 | Vue组件间的通信方式

2023/9/30 15:20:50

🖥️ 前端经典面试题专栏:前端经典面试题 Vue组件间的通信方式
🧑‍💼 个人简介:一个不甘平庸的平凡人🍬

✨ 个人主页:CoderHing的个人主页

🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️

👉 你的一键三连是我更新的最大动力❤️


目录

一、回答点

二、深入回答

props/$emit

父组件向子组件传值

eventBus 事件总线($emit/$on)

依赖注入Provide / inject

ref/$refs

$parent/ $children

$attrs/$listeners

三、总结及归纳

父子组件的通信

兄弟组件的通信

任意组件之间


一、回答点

普遍的 说 三四个即可 父/子 props/emit eventBus  provide/ inject 等..

二、深入回答

props/$emit

        简述: 父组件通过 props 向子组件传递数据,子组件通过 $emit 和父组件通信

  • 父组件向子组件传值

    • props 只能由父组件对子组件进行传值, 使得父子组件之间形成一个单向绑定.子组件的数据会随着父组件不断的更新
    • props 可以定义一个以上(包括一个)的数据,对于子组件接收的数据,可以是各种数据类型,也可以传递一个函数
    • 代码展示
<!-- 父组件 -->
<template>
  <div class="father">
    <son :msg="msg" :fn="fatherFunction" />
  </div>
</template>

<script>
import son from './sons.vue'
export default {
  name: 'FatherPage',
  components: {
    son
  },
  data() {
    return {
      msg: '父组件数据'
    }
  },
  methods: {
    fatherFunction() {
      console.log('fatherPage')
    }
  }
}
</script>
<!-- 子组件 -->
<template>
  <div class="son">
    <p>父组件传递过来的值:{{ msg }}</p>
    <button @click="fn">按钮</button>
  </div>
</template>

<script>

export default {
  name: 'Son',
  props: ['msg', 'fn']
}
</script>
  • 子组件向父组件传值
    • $emit 绑定一个自定义事件,当这个事件被触发时会将参数传递给父组件 而父组件通过 v-on 或语法糖(@) 监听并接收参数
    • 代码展示
<!-- 父组件 -->
<template>
  <div class="father">
    <son @clickSon="clickSonMsg" />
  </div>
</template>

<script>
import son from './sons.vue'
export default {
  name: 'FatherPage',
  components: {
    son
  },
  methods: {
    clickSonMsg() {
      console.log('子组件传递过来点击信息')
    }
  }
}
</script>
<!-- 子组件 -->
<template>
  <div class="son">
    <button @click="sonClick">告诉父亲被打了!</button>
  </div>
</template>

<script>

export default {
  name: 'SonPage',
  methods: {
    sonClick() {
      this.$emit('clickSonMsg')
    }
  }
}
</script>

eventBus 事件总线($emit/$on)

        简述:eventBus事件总线 适合 父子组件|非父子组件等之间的通信,使用步骤如下:

  • 创建事件中心管理组件之间的通信
  • 发送事件
  • 接收事件

依赖注入Provide / inject

        简述: Vue中的依赖注入,用于 父子组件之间通信,也可用于 祖孙组件之间的通信,在层级很深的情况下,使用这种方式进行传值.

provide / inject 是Vue提供的两个钩子函数 和 data methods 是同级的 并且 provide书写跟data是一样的.

  • provide 是用来发送数据/方法
  • inject 用来接收数据/方法
  • 需要注意的是 依赖注入提供的属性 都 不是响应式
  • 代码展示
// 在父组件中:
  provide() {
    return {
      num: this.num
    }
  }

// 在子组件中:
  inject: ['num']

ref/$refs

        简述:也是实现 父子组件 之间的通信

  • ref:用在子组件上,它的引用指向了子组件的实例. 可以通过实例来访问组件的数据和方法..

$parent/ $children

  • $parent 可以让组件访问父组件的实例(上一级组件的属性和方法)
  • $children 可以让组件访问子组件的实例,注: 它并不能保证 子组件的顺序,并且访问的数据 不是响应式数据

$attrs/$listeners

        简述: Vue引入了它们两个 可以实现 跨组件跨代通信

  • $attrs: 继承所有的父组件属性(除了prop传递的属性 class style),常用于 子组件的元素上
  • $listeners: 它是一个对象,包含了 作用在这个组件上的所有监听器,配合v-on=$listeners,将所有的事件监听器指向这个组件的某个特定的元素.

三、总结及归纳

父子组件的通信

  • 子组件通过 props 来接收父组件传递过来的数据, 父组件在子组件上 注册监听事件,子组件通过 $emit触发事件 向 父组件发送数据.
  • 通过ref属性给子组件设置名字,父组件通过$refs=组件名来获取子组件实例,子组件通过$parent获得父组件,这样也可以实现通信.
  • 使用provide/inject , 在父组件中 通过 provide提供变量, 子组件中通过inject将变量注入到组件中,不论层级有多深,只要调用了inject 就可以注入 provide中的数据

兄弟组件的通信

  • eventBus方法,它本质是通过 创建一个空的Vue实例来作为消息传递的对象, 通信组件 引入这个实例,通过这个实例来监听和触发时间,实现传递
  • 通过$parent/$refs 来获取到兄弟组件 也可以进行通信

任意组件之间

  • 还是通过eventBus来实现,他创建了一个 中心点 可以用它来传递事件和接收

http://www.jnnr.cn/a/114166.html

相关文章

词嵌入数据集的预处理--Word2Vec实现(一)

文章目录用于预训练词嵌入的数据集正在读取数据集下采样中心词和上下文词的提取负采样小批量整合代码小结用于预训练词嵌入的数据集 在本节中&#xff0c;我们从用于预训练词嵌入模型的数据集开始&#xff1a; 数据的原始格式将被转换为可以在训练期间迭代的小批量。 将准备…

upload-labs靶场详解

目录环境部署Pass-01前端绕过Pass-02 文件类型绕过Pass-03Pass-04Pass-05Pass-06环境部署 实验工具&#xff1a;PHPstudyupload-labs 项目地址&#xff1a;https://github.com/c0ny1/upload-labsupload-labs-writeup&#xff1a;项目地址&#xff1a;https://github.com/LandG…

MFC入门基础(十一)控件编程示例

参考博客&#xff1a;VS2010/MFC编程入门之二十三&#xff08;常用控件&#xff1a;按钮控件的编程实例&#xff09;-软件开发-鸡啄米 以下内容主要来自于上述大神博客&#xff0c;稍作修改 1、首先还是新建一个mfc的应用程序&#xff08;基于对话框的&#xff09; 2、删除掉…

ffmpeg命令分析-yuv封装mp4

本系列 以 ffmpeg4.2 源码为准&#xff0c;下载地址&#xff1a;链接&#xff1a;百度网盘提取码&#xff1a;g3k8 本系列主要分析各种 ffmpeg 命令参数 在代码里是如何实现的。a.yuv 下载链接&#xff1a;百度网盘&#xff0c;提取码&#xff1a;1h1w 。 命令如下&#xff1…

设计模式学习(三):工厂模式

设计模式学习&#xff08;三&#xff09;&#xff1a;工厂模式 作者&#xff1a;Grey 原文地址&#xff1a; 博客园&#xff1a;设计模式学习&#xff08;三&#xff09;&#xff1a;工厂模式 CSDN&#xff1a;设计模式学习&#xff08;三&#xff09;&#xff1a;工厂模式…

打好基本功!

hi 大家好&#xff0c;上个周末带小伙伴&#xff0c;一起复习了一遍数据结构与算法&#xff0c;对数据结构与算法核心知识进行梳理&#xff0c;希望大家早日掌握这些核心知识&#xff0c;打造自己坚实的基础&#xff0c;为自己目标慢慢积累&#xff0c;等到自己春天的到来。..…

千万不要点进来!看完Python从入门到实践,你就要走上秃头的道路

前言 本文适用人群 本文的设计主要是针对对编程有兴趣且没有任何编程经验的人&#xff0c;只要您想要接触编程领域&#xff0c;尝试自已编写代码开发程序&#xff0c;那本文一定是好的选择。 如果您有一定的编程基础&#xff0c;想要在编程领域更上一层楼的话&#xff0c;本…

【微服务】Nacos服务端完成微服务注册以及健康检查流程

目录 一、前言 1、Nacos项目结构 二、微服务注册以及健康检查流程 1、流程图 2、处理微服务注册请求 2.1、InstanceController的register()注册入口 2.2、InstanceOperatorServiceImpl的registerInstance()逻辑 3、ServiceManager组件 3.1、registerInstance()逻辑 3…

【数学】尺规找椭圆中心和焦点

∣尺规找椭圆中心和焦点NightguardSeries.∣\begin{vmatrix}\Huge{\textsf{ 尺规找椭圆中心和焦点 }}\\\texttt{ Nightguard Series. }\end{vmatrix}∣∣​ 尺规找椭圆中心和焦点 Nightguard Series. ​∣∣​ 偶然想到的问题&#xff0c;其实不难找到做法 众所周知中点弦斜率…

【笔试及竞赛重点之背包问题】一文吃透背包问题全家桶

1. 01背包问题 1.1 版本1 二维 &#xff08;1&#xff09;状态f[i][j]定义&#xff1a;前 ii 个物品&#xff0c;背包容量 jj 下的最优解&#xff08;最大价值&#xff09;&#xff1a; 当前的状态依赖于之前的状态&#xff0c;可以理解为从初始状态f[0][0] 0开始决策&#…

开源时代:刘韧对话任旭东崔宝秋章文嵩蒋涛

来源&#xff1a;「1024程序员节」之「技术英雄会」主题&#xff1a;开源英雄共话 我们的开源时代时间&#xff1a;2022年10月24日主持嘉宾刘韧&#xff1a;云算科技董事长、《知识英雄》作者、DoNews创始人对话嘉宾任旭东&#xff1a;华为首席开源联络官、开源与开发者产业发展…

VSCode将一份代码同步到多台服务器的解决方案

下载插件 首先去 VSCode 插件下载处输入 sftp &#xff0c;有三个&#xff0c;选择第二个&#xff0c;作者是 Natizyskunk &#xff0c;原版作者的仓库已经几年没维护了&#xff0c;有很多 bug&#xff0c;这个老外接手了这个插件并维护。 配置config 按住 commandshiftp&am…

样品制备丨艾美捷蛋白质羰基比色测定试剂盒方案

蛋白质羰基化是一种产生蛋白质羰基加合物的翻译后修饰&#xff0c;在氧化应激过程中发生。1羰基由自由基和非自由基活性氧&#xff08;ROS&#xff09;在多种氨基酸&#xff0c;特别是赖氨酸、精氨酸、脯氨酸或苏氨酸残基上生成。这些修饰在化学和代谢上是稳定的&#xff0c;使…

若依框架自用心得体会

1、初始准备 拉取项目&#xff0c;配置数据库和redis&#xff0c;不用验证码可以在配置里面关了&#xff0c;也就不用redis了 启动好没有问题之后&#xff0c;新建自己业务模块&#xff0c;在idea中右键项目新建module模块 该框架中有demo模块&#xff0c;可以根据demo模块中的…

虚拟试穿VTNFP论文笔记

VTNFP虚拟试穿笔记 文章目录VTNFP虚拟试穿笔记任务相关工作:VTNFPPerson Representation&#xff08;人体表示&#xff09;Clothing Deformation Module M1&#xff08;衣物变形&#xff09;Segmentation Map Generation Module M2&#xff08;分割图&#xff09;Try-on Synthe…

实现分布式锁SchedulerLock

Spring 提供了一种简单的方法来实现用于调度作业的 API。在我们部署应用程序的多个实例之前&#xff0c;它运行良好。 默认情况下&#xff0c;Spring 无法处理多个实例上的调度程序同步。它在每个节点上同时执行作业。 1.添加Maven依赖项 <dependency><groupId>…

信创国产化,高速数据传输系统-UTS

信创国产化&#xff1a;统一数据传输系统 【Unity Transfer System--UTS】 目前&#xff0c;“信息技术应用创新产业”是国家部署的一项重要战略&#xff0c;是推动国家经济发展和信息技术产业应用的一项伟大举措。 作为深耕高速数据传输行业近二十年的资深“统一数据传输系统…

ES2022(ES13)简介

文章目录类类的字段声明私有属性和方法私有属性私有方法类的静态公共方法和字段静态块正则表达式对象数组与字符串专栏目录请点击 类 类的字段声明 可以在顶层进行类的字段的定义和初始化在以前的规范中&#xff0c;类的字段的初始化一般是在构造函数中的 class MyClass {na…

Grub启动Linux引导到BIOS问题的解决

前几天为了将archlinux gnome从X11调整为Wayland&#xff0c;修改grub&#xff08;sudo nano /etc/default/grub&#xff09;&#xff0c;在内核参数中添加 “ibt&#xff1d;off“&#xff0c;再执行sudo grub-mkconfig -o /boot/grub/grub.cfg后重启&#xff0c;无法启动arch…

mysql隔离级别RR下的行锁、临键锁、间隙锁详解及运用

一&#xff1a;mysql 锁的基本概念 锁&#xff1a;悲观锁、乐观锁 悲观锁&#xff1a;写锁 for update、读锁for share 写锁&#xff1a;只允许当前事务读写&#xff0c;其它事务全部等待&#xff0c;包括读取数据&#xff0c;锁的数据范围需要具体分析 读锁&#xff1a;允…
最新文章