Vue.js 从零开始 mitt

还记得区域元件有自己的作用域吗?已知外层元件可以跟内层元件传递资料(props),或是传递事件(emit),但是当有另外两个子元件,彼此需要传递又该怎麽做?


mitt 介绍

概念图:
https://ithelp.ithome.com.tw/upload/images/20211004/201183479Qh0pKnAlN.png

Vue 2中要进行跨元件常使用的方式就是Event Bus,只要使用$on$emit这两个语法,就能达到跨元件的沟通,但是在Vue 3移除了$on$emit..等语法。

Vue 3 可以使用mitt套件来达成相同作用,写法与Vue 2Event Bus相当接近。

mitt参考文件


mitt 建立

选择其中下列两个方式

  1. npm安装:
$ npm install --save mitt
  1. cdn引入:
<script src="https://unpkg.com/mitt/dist/mitt.umd.js"></script>

建立mitt()实体,指定到emitter上:

const emitter = mitt();
<div id="app">
        <h4>{{ text }}</h4>
        <con-tainer></con-tainer>
        <con-tainer2></con-tainer2>
    </div>
const emitter = mitt();
const app = Vue.createApp({
  data() {
    return {
      text: "外部元件"
    };
  }
});
app.component("ConTainer", {
  data() {
    return {
      text: "component1",
      componentText: "由元件1传入的文字",
    };
  },
  methods: {
    click() {
      emitter.emit('componentText', this.componentText);
    }
  },
  template: `<div>
    <h4>{{ text }}</h4>
    <button @click="click">Click me!</button>
  </div>`
});
app.component("ConTainer2", {
  data() {
    return {
      text: "component2",
      componentText: ""
    };
  },
  created() {
    emitter.on('componentText', (data) => {
      this.componentText = data;
    })
  },
  template: `<div>
    <h4>{{ text }}</h4>
    <h4>{{ componentText }}</h4>
  </div>`
});
app.mount('#app');

  1. 定义要传出去的资料,emitter.emit('componentText', this.componentText);,传递component1datacomponentText的值。
  2. 定义接收emitter.on(data)里就是emitter.emit传出来的值。

上面范例就是mitt的使用方法,比slot简单又好写呢。

/images/emoticon/emoticon01.gif


参考资料

六角学院
重新认识 Vue.js


<<:  Day29 平常如何学习新的知识?

>>:  30天零负担轻松学会制作APP介面及设计【DAY 29】

JavaScript Day21 - AJAX(3)

axios axios 是处理 AJAX 的套件,是透过 JavaScript Day19 - AJ...

资通安全管理法何处寻?

我在,故我扛 资通安全管理法,简称「资安法」,针对公务机关及特定非公务机关,意在建立一套包含事前、事...

渗透测试-列举可用的服务和资源

-渗透测试方法 使用 CVE 进行漏洞扫描通常遵循识别和枚举端口、服务和资源的情况。进行渗透测试并...

Day 19 MMU 与 TLB

前言 前面几天提到了虚拟记忆体,以及一些关於实体记忆体与虚拟记忆体的映射方式,今天来讲讲两个重要的设...

[Day12] Tableau 轻松学 - 长条图工作表

前言 到目前为止,我们已经积累一定的基础概念,例如:资料型态、资料角色、档案架构等等,因此可以提升到...