Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Одностраничная шина событий на Vue 3 (https://javascript.ru/forum/css-html/82733-odnostranichnaya-shina-sobytijj-na-vue-3-a.html)

fori 20.06.2021 19:14

Одностраничная шина событий на 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?

Aetae 20.06.2021 22:41

Без вариантов, в Vue 3 переработана в сторону упрощения система событий.
Либо писать самому, либо использовать сторонние решения.

P.S. Вообще у меня от vue 3 горит не слабо. Кучу фич выкинули, кучу вещей серьёзно усложнили и "запачкали".
Некоторые вещи таки улучшили, но баланс абсолютно не в пользу улучшений, ИМХО. Vue 2 был интуитивен. Первое решение проблемы приходящее в голову - в 99% случаев было верным. В vue 3 надо держать в голове кучу нерелевантного дерьма, меньше чем в реакте, но той чистоты и лёгкости уже нет. :(


Часовой пояс GMT +3, время: 12:39.