Одностраничная шина событий на Vue 3
Здравствуйте, в Vue 2 я создавал шину событий для конкретной страницы и всех ёё компонентов используя к примеру
//main.js global.context = new Object(); global.context.app = Vue; Тогда я присваевал контекст страницы глобальному обэкту global.context к примеру
created(){
global.context.authorization = this;
}
и к примеру в компоненте любой вложености или на странице вызывал
global.context.authorization.$emit(
"authorizationMessage",
this.t("Password fields didn't match")
);
Также я и принимал события
global.context.authorization.$on("authorizationMessage", (msg) => {
alert(msg);
});
Но пытаясь повторить подход на Vue 3 я получаю ошибку
Uncaught (in promise) TypeError: global.context.authorization.$on is not a function
at Proxy.created (Messenger.vue?1b1a:25)
at callWithErrorHandling (runtime-core.esm-bundler.js?5c40:154)
at callWithAsyncErrorHandling (runtime-core.esm-bundler.js?5c40:163)
at callHookWithMixinAndExtends (runtime-core.esm-bundler.js?5c40:6032)
at callSyncHook (runtime-core.esm-bundler.js?5c40:6018)
at applyOptions (runtime-core.esm-bundler.js?5c40:5956)
at finishComponentSetup (runtime-core.esm-bundler.js?5c40:6636)
at setupStatefulComponent (runtime-core.esm-bundler.js?5c40:6567)
at setupComponent (runtime-core.esm-bundler.js?5c40:6503)
at mountComponent (runtime-core.esm-bundler.js?5c40:4206)
Насколько я понимаю фишка с контекстами не будет работать если она обернута в прокси, как я могу улучшить подход с локальными шинами событий... могу ли я както присвоить в global.context.authorization = this; не от прокси а от VueComponent? |
Без вариантов, в Vue 3 переработана в сторону упрощения система событий.
Либо писать самому, либо использовать сторонние решения. P.S. Вообще у меня от vue 3 горит не слабо. Кучу фич выкинули, кучу вещей серьёзно усложнили и "запачкали". Некоторые вещи таки улучшили, но баланс абсолютно не в пользу улучшений, ИМХО. Vue 2 был интуитивен. Первое решение проблемы приходящее в голову - в 99% случаев было верным. В vue 3 надо держать в голове кучу нерелевантного дерьма, меньше чем в реакте, но той чистоты и лёгкости уже нет. :( |
| Часовой пояс GMT +3, время: 06:04. |