还记得区域元件有自己的作用域吗?已知外层元件可以跟内层元件传递资料(props
),或是传递事件(emit
),但是当有另外两个子元件,彼此需要传递又该怎麽做?
mitt
介绍概念图:
Vue 2
中要进行跨元件常使用的方式就是Event Bus
,只要使用$on
与$emit
这两个语法,就能达到跨元件的沟通,但是在Vue 3
移除了$on
、$emit
..等语法。
Vue 3 可以使用mitt
套件来达成相同作用,写法与Vue 2
的Event Bus
相当接近。
mitt
建立npm
安装:$ npm install --save mitt
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');
emitter.emit('componentText', this.componentText);
,传递component1
里data
的componentText
的值。emitter.on
,(data)
里就是emitter.emit
传出来的值。上面范例就是mitt
的使用方法,比slot
简单又好写呢。
>>: 30天零负担轻松学会制作APP介面及设计【DAY 29】
axios axios 是处理 AJAX 的套件,是透过 JavaScript Day19 - AJ...
我在,故我扛 资通安全管理法,简称「资安法」,针对公务机关及特定非公务机关,意在建立一套包含事前、事...
-渗透测试方法 使用 CVE 进行漏洞扫描通常遵循识别和枚举端口、服务和资源的情况。进行渗透测试并...
前言 前面几天提到了虚拟记忆体,以及一些关於实体记忆体与虚拟记忆体的映射方式,今天来讲讲两个重要的设...
前言 到目前为止,我们已经积累一定的基础概念,例如:资料型态、资料角色、档案架构等等,因此可以提升到...