放肆青春的博客
首页
前端
算法
网络
面试
技术
后端
运维
杂项
数据库
工具
网址
电脑
个人
文章
  • 分类
  • 标签
  • 归档
github (opens new window)
gitee (opens new window)

放肆青春

一个前端菜鸟的技术成长之路
首页
前端
算法
网络
面试
技术
后端
运维
杂项
数据库
工具
网址
电脑
个人
文章
  • 分类
  • 标签
  • 归档
github (opens new window)
gitee (opens new window)
  • 前端

    • 前端 概览
    • 前端汇总

    • front 博文

    • front 项目总结

    • front 高级

    • front tools

  • vue

    • vue 概览
    • vue 汇总

    • vue 博文

      • vue对比
      • vue-router
      • vuex
      • vue2生命周期
      • vue组件通信
        • vue 组件通信
          • 1. $emit和 props
          • 2. $parent和$children
          • 3. provide 和 inject
          • 4. $attrs和$listeners
          • 5. eventBus 中央事件总线
          • 6. vuex
      • vue修饰符
      • vue异步组件
      • vue插槽
      • vue2 hook
    • vue 项目总结

    • vue 高级

  • html

    • html 概览
    • html 汇总

    • html 博文

  • css

    • css 概览
    • css 汇总

    • css 博文

    • sass

    • less

  • js

    • javascript 概览
    • JS 汇总

    • ES6

    • JS 博文

    • JS 工具

  • node

    • node 概览
    • node 汇总

    • node 框架

    • node 博文

  • react

    • react 概览
    • react 汇总

    • react 博文

    • react 高级

  • 微信小程序

    • 微信小程序 概览
    • 微信小程序总结
    • 微信小程序文章
    • 微信小程序 博文

    • 微信小程序 高级

  • 微信公众号

    • 微信公众号 概览
    • 微信公众号总结
    • 微信公众号文章
  • 多端开发

    • 多端开发
    • dsbridge 概览
    • jsbridge 概览
    • webview
    • uniapp

      • uniapp 概览
    • taro

      • taro 概览
    • flutter

      • flutter 概览
      • flutter 环境搭建
    • electron

      • electron 概览
  • front
放肆青春
2021-10-09

vue组件通信

# vue 组件通信

组件间通信的分类可以分成以下四种情况:

  1. 父子组件之间的通信

  2. 兄弟组件之间的通信

  3. 跨级(祖孙与后代)组件之间的通信

  4. 非关系组件间之间的通信

# 1. $emit和 props

适用场景:父子组件通信

# 2. $parent和$children

适用场景:父子、跨级组件通信

# 3. provide 和 inject

适用场景:跨级组件通信

provide 和 inject 绑定不是响应的,它被设计是为组件库和高阶组件服务的,平常业务中的代码不建议使用。

# 4. $attrs和$listeners

适用场景:跨级组件通信

$attrs包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 style 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind="$attrs" 传入内部组件——在创建高级别的组件时非常有用。(父传孙专用)

$listeners包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器。它可以通过 v-on="$listeners" 传入内部组件——在创建更高层次的组件时非常有用。(孙传父专用)

# 5. eventBus 中央事件总线

适用场景:父子、兄弟、跨级,非关系组件通信

使用场景:对于比较小型的项目,没有必要引入 vuex 的情况下,可以使用 eventBus

实现原理:

EventBus 是消息传递的一种方式,基于一个消息中心,订阅和发布消息的模式,称为发布订阅者模式。

on('name', fn) 订阅消息,name:订阅的消息名称, fn: 订阅的消息

emit('name', args) 发布消息, name:发布的消息名称 , args:发布的消息

实现:

class Bus {
  constructor() {
    this.callbacks = {};
  }

  $on(name, fn) {
    this.callbacks[name] = this.callbacks[name] || [];
    this.callbacks[name].push(fn);
  }
  $emit(name, args) {
    if (this.callbacks[name]) {
      this.callbacks[name].forEach((cb) => cb(args));
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

注:只不过在 vue 中已经替我们实现好了$emit,$on 这些方法,所以直接用的时候去 new Vue()就可以了.

缺点:

  1. 代码逻辑性极具下降,可阅读性变低
  2. 对于每一个 action 父组件都需要一个 on(或 dispatch)一个事件来处理
  3. 你将很难查找到每一个事件是从哪里触发,满篇都是业务逻辑

# 6. vuex

适用场景:父子、兄弟、跨级,非关系组件通信

Vuex 状态管理的流程:view———­>actions———–>mutations—–>state————­>view

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。对一个中大型单页应用来说是不二之选。

更新时间: 12/15/2021, 5:49:44 PM
vue2生命周期
vue修饰符

← vue2生命周期 vue修饰符→

最近更新
01
前端权限管理
02-24
02
vue2指令
02-24
03
vue2 hook
02-24
更多文章>
Theme by Vdoing | Copyright © 2019-2022 放肆青春
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式