Одностраничная шина событий на 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, время: 12:39. |