Показать сообщение отдельно
  #1 (permalink)  
Старый 20.06.2021, 19:14
Кандидат Javascript-наук
Отправить личное сообщение для fori Посмотреть профиль Найти все сообщения от fori
 
Регистрация: 27.01.2021
Сообщений: 117

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

Последний раз редактировалось fori, 20.06.2021 в 19:20.
Ответить с цитированием