组件通信方法

84 阅读1分钟

单页面应用(SPA --- single Page Application)

整个项目只有一个html文件 视觉上的页面切换,本质是组件的切换

组件通信

  1. 父子通信

通过props实现

  1. 子父通信

通过$emit实现

  1. 非父子关系的组件通信

bus事件总线通信

  1. $refs实现组件通信

获取并操作DOM、组件对象

  1. vuex 集中式状态管理工具 【后续专门讲解】

bus事件总线通信

本质就是new Vue() 实例对象

let bus = new Vue()  //事件总线对象

例如:溜娃

  • 家长A带着子组件a-child
  • 家长B带着子组件b-child
  • 两个子组件之间,分享糖果
  1. 定义bus对象
let bus = new Vue()
  1. 触发bus总线的自定义事件
handleSend() {
    bus.$emit('give-a-candy',1)  //【2】触发bus总线自定义事件
    this.candy -= 1
}
  1. 订阅总线bus对象的自定义事件
created () {
    bus.$on('give-a-candy',(n)=>{ //【3】订阅总线bus对象的自定义事件
        console.log(n);
        this.candy += n
    })
},

refs的使用

用以获取真实DOM结构

  • 操作普通标签的DOM
  • 操作组件标签实例对象

不要过度使用DOM操作

适合用DOM操作的场景

  • 焦点管理
  • 多媒体文件操作 (音频、视频)

原生JS提供的多媒体操作方法

message组件封装

示例组件

  1. 结构

  2. 样式

  3. 功能

  • props
    • m-type 主题配置 'info' success|warning|info|error
    • m-close 是否可关闭 false Boolean
    • m-center 是否居中 false Boolean
    • m-style 自定义主题 '' String
    • m-title 提示内容 '默认提示' String
  • slot
    • icon 自定义图标
    • title 自定义内容格式
  • 交互
    • 自动关闭
    • 点击关闭