我正在通过遵循微前端架构创建一个大型应用程序。比方说,我将我的整个应用程序划分为5个Micro (micro A(以Vue)、micro B(以Vue)、micro C(以角)、micro D (in React)和一个shell应用程序My-App-Shell (在Vue中))。
我使用pubsub(一个以JavaScript编写的基于主题的发布/订阅库)在微应用程序中的不同组件之间通信。我的每一个微型应用程序都完美地使用这个公共子系统在其自己的组件之间进行通信。但是我需要一个公共子系统(由我的shell应用程序管理)来在不同的微应用程序之间进行通信。
如何做到这一点?
发布于 2020-02-02 13:23:39
您可以在这里轻松地在CustomEvent
之上构建一个抽象:
const handlers = {};
window.publish = (topic, message) => {
var ev = new CustomEvent('pubsub', {
detail: { topic, message },
});
document.body.dispatchEvent(ev);
};
window.subscribe = (topic, handler) => {
const topicHandlers = handlers[topic] || [];
topicHandlers.push(handler);
handlers[topic] = topicHandlers;
};
window.unsubscribe = (topic, handler) => {
const topicHandlers = handlers[topic] || [];
const index = topicHandlers.indexOf(handler);
index >= 0 && topicHandlers.splice(index, 1);
};
document.body.addEventListener('pubsub', ev => {
const { topic, message } = ev.detail;
const topicHandlers = handlers[topic] || [];
topicHandlers.forEach(handler => handler(message));
});
(演示见:https://jsfiddle.net/qo5nca71/)
在大多数情况下,这应该就足够了。如果你想得到更多的“安全”(例如,微前沿不能改变抽象,这是在推动。我建议使用一种更复杂的方法,比如Piral中的事件机制(参见https://github.com/smapiot/piral)。
https://stackoverflow.com/questions/59500036
复制相似问题