Это внешний URL на внешний собранный компонент, или на локальный собирающийся в исходных файлах?

|
mattersj 2022-07-02 17:26:31
Alexey Topunov 2022-07-02 17:26:11
3.18.3

vuejs_ru-1089768.jpg

Alexey Topunov 2022-07-02 17:27:01
mattersj 2022-07-02 17:26:31

Не знал, спасибо х2.

Lugovenche 2022-07-02 17:40:23
YuryDmitriev 2022-07-02 16:27:56
Документация говорит о том, чтобы заменять on на глобальный eventbus. Но это плохая идея

Ну и как же тогда лучше теперь мне вытащить объект?

azgiliat 2022-07-02 17:58:09
Lugovenche 2022-07-02 17:40:23
Ну и как же тогда лучше теперь мне вытащить объект?

Вынести это дело в какой-нибудь composable, наверное
Ну или вкрячить какой-нибудь mitt в качестве глобального eventbus

YuryDmitriev 2022-07-02 18:03:02
Lugovenche 2022-07-02 17:40:23
Ну и как же тогда лучше теперь мне вытащить объект?

Зависит от задачи по коду трудно сказать что ты делаешь

Lugovenche 2022-07-02 18:03:47
YuryDmitriev 2022-07-02 18:03:02
Зависит от задачи по коду трудно сказать что ты делаешь

я пока просто учусь. Мне бы хотелось бы просто вытащить объект из миксина

YuryDmitriev 2022-07-02 18:10:52
Lugovenche 2022-07-02 18:03:47
я пока просто учусь. Мне бы хотелось бы просто вытащить объект из миксина

Тут зависит от задачи. Можно пойти разными путями
1 эвент бас
2 стор
3 сервис

Lugovenche 2022-07-02 18:14:06
YuryDmitriev 2022-07-02 18:10:52
Тут зависит от задачи. Можно пойти разными путями
1 эвент бас
2 стор
3 сервис

Не знаю тогда как объяснить.
Есть главный app.js
window.Vue = require(‘vue’).default;
Дальше как понимаю в нем нужно назначить
const eventBus = new window.Vue
export default eventBus

Затем в мексине у меня описан метод
viewDetails(id){
let workToView = _.find(this.works, {id:id})
this.$emit(«viewDetails»,workToView);
}
И чтоб увидеть детали объекта я делаю
import WorkService from «../../mixins/WorkService»;

export default {
mixins: [WorkService],
data(){
return{
work:{}
}
},
created() {
eventBus.$on(«viewDetails»,(selectedWork) =>{
this.work = selectedWork
})
console.log(this.work);
}
}

2022-07-02 18:28:47
За ивент бас сделанный из Vue инстанса нужно бить по рукам)
2022-07-02 18:29:04
Для этого есть nanoevens, mitt и т.д.
Lugovenche 2022-07-02 18:35:10
Лучше совет дайте начинающему, а не ругать сразу
Lugovenche 2022-07-02 18:35:40
Понял, что в главный app.vue eventbus не надо. Отдельный js для этого сделал
boombap32 2022-07-02 18:58:20
Привет, посоветуйте пожалуйста какие нибудь курсы или видео по vue , а то просто верстать умею, а о компонентах и прочем представления мало
Александр 2022-07-02 19:07:53
Доброго времени суток, сори за массивный вопрос заранее. Подскажите как правильно сделать 2 экземпляра Vue3 на одной странице? Вопрос на сколько я понимаю не тривиальный. Дано: один глобальный App и дочерние внешние(!) модули, которые должны загружаться и компилиться в реалтайме через Vue(createApp) от основного глобального аппа (без подключения собственных vue), подгрузка модулями через dynamic import.

Схема вроде работает за исключением HMR-а, подключая (mount-я в DOM) дочерний апп, обрывается HMR и у глобального(если запускать его в serve-режиме) и у дочернего аппа. При этом запуская глобальный в режиме prod-а ситуация не меняется — дочерний HMR не работает. В консоли всё ок, апдейты прилетают (по обеим аппам), но компонент не ребилдится.

Без HMR-а не вариант, т.к. вся работа ведется в дочерних. WS hmr-а разделил просто портами, оба dev-server-а https, clientPort прописан. Облазал довольно много issues прежде чем писать…

Кажется что изобретаю микрофронтенды, почитал про webpack module federation — ничего не понял, если честно, но по-умолчанию не хочется завязываться на вебпак от слова совсем. В идеале даже без vite обойтись (в дочерних app-ах), а просто на dynamic-импортах сделать.

То что я описал вообще реально сделать? Мб какие-то либы готовые есть которые глянуть можно?

mattersj 2022-07-02 19:09:46
boombap32 2022-07-02 18:58:20
Привет, посоветуйте пожалуйста какие нибудь курсы или видео по vue , а то просто верстать умею, а о компонентах и прочем представления мало

https://vuejs.org/guide/essentials/component-basics.html

Components Basics | Vue.jsvuejs.org
Vue.js — The Progressive JavaScript Framework
shgkme 2022-07-02 19:10:47
Александр 2022-07-02 19:07:53
Доброго времени суток, сори за массивный вопрос заранее. Подскажите как правильно сделать 2 экземпляра Vue3 на одной странице? Вопрос на сколько я понимаю не тривиальный. Дано: один глобальный App и дочерние внешние(!) модули, которые должны загружаться и компилиться в реалтайме через Vue(createApp) от основного глобального аппа (без подключения собственных vue), подгрузка модулями через dynamic import.

Схема вроде работает за исключением HMR-а, подключая (mount-я в DOM) дочерний апп, обрывается HMR и у глобального(если запускать его в serve-режиме) и у дочернего аппа. При этом запуская глобальный в режиме prod-а ситуация не меняется — дочерний HMR не работает. В консоли всё ок, апдейты прилетают (по обеим аппам), но компонент не ребилдится.

Без HMR-а не вариант, т.к. вся работа ведется в дочерних. WS hmr-а разделил просто портами, оба dev-server-а https, clientPort прописан. Облазал довольно много issues прежде чем писать…

Кажется что изобретаю микрофронтенды, почитал про webpack module federation — ничего не понял, если честно, но по-умолчанию не хочется завязываться на вебпак от слова совсем. В идеале даже без vite обойтись (в дочерних app-ах), а просто на dynamic-импортах сделать.

То что я описал вообще реально сделать? Мб какие-то либы готовые есть которые глянуть можно?

Нужны два приложения, или «одно внутри другого»?

Александр 2022-07-02 19:12:32
shgkme 2022-07-02 19:10:47
Нужны два приложения, или «одно внутри другого»?

одно внутри другого, но «второе» должно подгружаться динамически (заранее при старте основного апа не известно о дочерних ничего)

shgkme 2022-07-02 19:13:28
Александр 2022-07-02 19:12:32
одно внутри другого, но «второе» должно подгружаться динамически (заранее при старте основного апа не известно о дочерних ничего)

Такого быть не должно. Если нужно «приложение» внутри другого, нужно делать одно приложение с компонентами.

Иначе в DOM одного приложения монтируется другое

Александр 2022-07-02 19:15:43
shgkme 2022-07-02 19:13:28
Такого быть не должно. Если нужно «приложение» внутри другого, нужно делать одно приложение с компонентами.

Иначе в DOM одного приложения монтируется другое

не совсем понял… всмысле условными dynamicComponent-ами их подгружать, а не createApp-ами?

shgkme 2022-07-02 19:17:37
Александр 2022-07-02 19:15:43
не совсем понял… всмысле условными dynamicComponent-ами их подгружать, а не createApp-ами?

Да. defineAsyncComponent, если нужно динамически регистрировать. Или динамическим компонентом, если нужен потом компонент.
За одно поддерево DOM должно отвечать одно приложение, состоящее из дерева экземпляров компонентов.
Вложенные приложения, которые могут перетереться сверху — не делают, потом пойдут непонятные проблемы.

А какая задача к такому привела, зачем именно приложение новое вложенное?

Александр 2022-07-02 19:22:41
shgkme 2022-07-02 19:17:37
Да. defineAsyncComponent, если нужно динамически регистрировать. Или динамическим компонентом, если нужен потом компонент.
За одно поддерево DOM должно отвечать одно приложение, состоящее из дерева экземпляров компонентов.
Вложенные приложения, которые могут перетереться сверху — не делают, потом пойдут непонятные проблемы.

А какая задача к такому привела, зачем именно приложение новое вложенное?

тут ошибка, я не корректно ответил на ваш первый вопрос видимо. задача в том чтобы дочерние <что-то(как сейчас понимаю, компоненты)> могли быть подгружаемыми в любой момент извне в основное приложение используя его же Vue-компилятор (без необходимости в каждом дочернем использовать свой Vue).

Но загвоздка в HMR похоже остается — я ведь не могу в dev-режиме пригрузить дочерний dynamicComponent через import() и так чтобы он hmr-ился при этом, через vite/webpack или что угодно, потому что это будет не приложение а обычный компонент…

shgkme 2022-07-02 19:31:34
Александр 2022-07-02 19:22:41
тут ошибка, я не корректно ответил на ваш первый вопрос видимо. задача в том чтобы дочерние <что-то(как сейчас понимаю, компоненты)> могли быть подгружаемыми в любой момент извне в основное приложение используя его же Vue-компилятор (без необходимости в каждом дочернем использовать свой Vue).

Но загвоздка в HMR похоже остается — я ведь не могу в dev-режиме пригрузить дочерний dynamicComponent через import() и так чтобы он hmr-ился при этом, через vite/webpack или что угодно, потому что это будет не приложение а обычный компонент…

Я проверил, что у меня сработал HMR. И не вижу причин, почему он не работает.

Опиши, что ты делаешь, или какая проблема и как решается)

shgkme 2022-07-02 19:31:54
Александр 2022-07-02 19:22:41
тут ошибка, я не корректно ответил на ваш первый вопрос видимо. задача в том чтобы дочерние <что-то(как сейчас понимаю, компоненты)> могли быть подгружаемыми в любой момент извне в основное приложение используя его же Vue-компилятор (без необходимости в каждом дочернем использовать свой Vue).

Но загвоздка в HMR похоже остается — я ведь не могу в dev-режиме пригрузить дочерний dynamicComponent через import() и так чтобы он hmr-ился при этом, через vite/webpack или что угодно, потому что это будет не приложение а обычный компонент…

Подгружался извне — имеется в виду по внешнему URL?

Александр 2022-07-02 19:32:03
shgkme 2022-07-02 19:31:54
Подгружался извне — имеется в виду по внешнему URL?

да

shgkme 2022-07-02 19:32:36
Александр 2022-07-02 19:32:03
да

Но тогда компонент ведь приходит уже собранный. Как это выглядит в разработке?

shgkme 2022-07-02 19:33:02
Это внешний URL на внешний собранный компонент, или на локальный собирающийся в исходных файлах?
shgkme 2022-07-02 19:35:55
Или этот внешний URL — на компонент, который собирается и хостится где-то по соседству параллельно?
Александр 2022-07-02 19:40:01
да вот если бы я понимал — как это выглядит в разработке… пока просто пытаюсь прототип собрать, возможно это вообще или нет мозгов не хватает понять)

теоретически как я вижу идеальный вариант — в глобальной апе есть какой-то лоадер (importModule: (src: string) => VueComponent) который через import() загружает внешний компонент (хостится он где угодно, это может быть локальный дев-сервер или ремоут), компилит его через свой же Vue и прописывает в стейт. При этом у этих дочерних компонентов обязательно должен быть доступен hot reload, чтобы при их загрузке в dev-режиме (видимо через вебпак всё же) эти компоненты ребилдились, при этом глобальный компонент может быть и не в дев-режиме…..

Александр 2022-07-02 19:42:33
shgkme 2022-07-02 19:33:02
Это внешний URL на внешний собранный компонент, или на локальный собирающийся в исходных файлах?

на внешний собранный или на внешний в dev-режиме (hmr)

Александр 2022-07-02 19:43:09
если мы говорим про вебпак — вероятно ответ будет в обоих случаях на «собранный», а у vite будут исходники в dev-режиме…
shgkme 2022-07-02 19:43:52
Александр 2022-07-02 19:40:01
да вот если бы я понимал — как это выглядит в разработке… пока просто пытаюсь прототип собрать, возможно это вообще или нет мозгов не хватает понять)

теоретически как я вижу идеальный вариант — в глобальной апе есть какой-то лоадер (importModule: (src: string) => VueComponent) который через import() загружает внешний компонент (хостится он где угодно, это может быть локальный дев-сервер или ремоут), компилит его через свой же Vue и прописывает в стейт. При этом у этих дочерних компонентов обязательно должен быть доступен hot reload, чтобы при их загрузке в dev-режиме (видимо через вебпак всё же) эти компоненты ребилдились, при этом глобальный компонент может быть и не в дев-режиме…..

То есть есть приложение 1 и компонент 2.
Приложение 1 и компонент 2 — независимы.

Оба могут быть как собранными, так и разрабатываться в dev режиме и как-то доступы с сервером.

Компонент 2 приходит в приложение 1 в рантайме нативным импортом по честному URL.

И надо, чтобы для компонента 2 работал HRM (когда он в дев)?

Александр 2022-07-02 19:44:48
shgkme 2022-07-02 19:43:52
То есть есть приложение 1 и компонент 2.
Приложение 1 и компонент 2 — независимы.

Оба могут быть как собранными, так и разрабатываться в dev режиме и как-то доступы с сервером.

Компонент 2 приходит в приложение 1 в рантайме нативным импортом по честному URL.

И надо, чтобы для компонента 2 работал HRM (когда он в дев)?

ну, получается, вроде так, да… пошел я нахрен?)))))

Александр 2022-07-02 19:45:29
по идее то вроде всё должно заводиться, по кр мере на вебпаке, не вижу вроде никаких противоречий технически =/
shgkme 2022-07-02 19:47:37
Александр 2022-07-02 19:45:29
по идее то вроде всё должно заводиться, по кр мере на вебпаке, не вижу вроде никаких противоречий технически =/

А hmr от второго сборщика как подключено в приложение?

Александр 2022-07-02 19:47:38
shgkme 2022-07-02 19:43:52
То есть есть приложение 1 и компонент 2.
Приложение 1 и компонент 2 — независимы.

Оба могут быть как собранными, так и разрабатываться в dev режиме и как-то доступы с сервером.

Компонент 2 приходит в приложение 1 в рантайме нативным импортом по честному URL.

И надо, чтобы для компонента 2 работал HRM (когда он в дев)?

нет, увидел сам проблему. если у компонента 2 нет своего vue — его не собрать же никак тупо…

shgkme 2022-07-02 19:47:56
Александр 2022-07-02 19:47:38
нет, увидел сам проблему. если у компонента 2 нет своего vue — его не собрать же никак тупо…

Компонент можно собрать, как обычный модуль

Александр 2022-07-02 19:48:44
shgkme 2022-07-02 19:47:37
А hmr от второго сборщика как подключено в приложение?

видимо как-то кастомно с полным unmount/mount, я вот и не понимаю как =/ интегрироваться то не получится, потому что основное может работать в прод-режиме

Александр 2022-07-02 19:49:26
и даже если основное в dev-режиме все равно оно никак не узнает о дочернем hmr-евенте =/
shgkme 2022-07-02 19:49:42
Александр 2022-07-02 19:49:26
и даже если основное в dev-режиме все равно оно никак не узнает о дочернем hmr-евенте =/

Основное приложение можно отдавать сервером, который внедряет скрипты от дев сервера

shgkme 2022-07-02 19:50:06
Но, кажется, HMR всё равно так не сработает
shgkme 2022-07-02 19:50:21
Можно использовать CTRL R, точно будет работать 😀
F0ll0wer 2022-07-02 19:56:57
Всем привет. простой вопрос: как бы кто реализовал лэйзилоад картинок во vue3? картинки не отдельными компонентами, когда можно атрибуты прописать, а те, которые приходят внутри строки с сервера
shgkme 2022-07-02 19:57:47
F0ll0wer 2022-07-02 19:56:57
Всем привет. простой вопрос: как бы кто реализовал лэйзилоад картинок во vue3? картинки не отдельными компонентами, когда можно атрибуты прописать, а те, которые приходят внутри строки с сервера

Добавить атрибут loading=»lazy» в <img>?

F0ll0wer 2022-07-02 19:58:11
я же написал: нет возможно писать никакие атрибуты
shgkme 2022-07-02 19:58:41
F0ll0wer 2022-07-02 19:58:11
я же написал: нет возможно писать никакие атрибуты

А как выводятся картинки?

shgkme 2022-07-02 19:58:54
Что значит «картинка приходит внутри строки»?
F0ll0wer 2022-07-02 19:58:54
они приходят в строке
sevesar 2022-07-02 19:59:03
F0ll0wer 2022-07-02 19:58:54
они приходят в строке

html?

shgkme 2022-07-02 19:59:03
F0ll0wer 2022-07-02 19:58:54
они приходят в строке

base64?

F0ll0wer 2022-07-02 19:59:08
да блин, ответ с сервера строкой: вся разметка
|