Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как динамически подгружать js-код для SPA? (https://javascript.ru/forum/misc/82365-kak-dinamicheski-podgruzhat-js-kod-dlya-spa.html)

AlexLF 24.04.2021 14:26

Цитата:

Сообщение от рони (Сообщение 535863)

Спасибо. Не очень разобрался, правда, с DOMParser. К тому же, это пока экспериментальная функция. Вот здесь человек с другого форума написал (вероятно) похожее решение без DOMParser - может быть, кому-то пригодится:
https://www.cyberforum.ru/javascript...l#post15443073

AlexLF 24.04.2021 14:34

Цитата:

Сообщение от Rise (Сообщение 535871)
А зачем модули использовать, никто же не заставляет?

"Когда я пришел" в JavaScript, ES-модули уже были. Я к ним приладился - удобно разбивать код, и передавать-принимать данные из модуля в модуль. И на "законном" основании, без всяких "прием модуль в JavаScript", немедленное выполнение на месте и прочей истории.

Я не использовал особо никогда стопку <script src='...'> для запуска кода. У меня js-код запускается как стопка функций, которые импортируются из разных модулей.

(Правда и навозился порядочно, пока научился работать с модулями, чего говорить.)

voraa 24.04.2021 17:30

Цитата:

Сообщение от AlexLF
Для этого - раньше - я складывал в main дивы со всеми возможными состояниями. И делал видимым только один див, который должен быть активным на этот момент. Не знаю, делают ли так, но это вполне работало.

Можно все "дивы со всеми возможными состояниями" помещать в <template> и потом копировать нужное в главный див.
Необходимый js код можно погружать по мере необходимости, если не хотите грузить все сразу.
Цитата:

Сообщение от AlexLF
У меня js-код запускается как стопка функций, которые импортируются из разных модулей.

Так они все равно импортируются из какого то модуля.
И совсем не обязательно делать так, что бы код выполнялся сразу при загрузке модуля на автомате. Можно обернуть его в функцию и вызывать ее после загрузки модуля, когда требуется.
Т.е. модуль грузится один раз. А функцию вызывать каждый раз, когда вы визуализируете див, связанный с этим модулем.

AlexLF 24.04.2021 18:41

Цитата:

Сообщение от voraa (Сообщение 535894)
Можно все "дивы со всеми возможными состояниями" помещать в <template> и потом копировать нужное в главный див.
Необходимый js код можно погружать по мере необходимости, если не хотите грузить все сразу.

С <template> это мысль. :thanks: Как раз повод попробовать. Я почему-то думал, что он только к теневому DOM относится.

AlexLF 25.04.2021 15:30

C <template> не получается, попробовал.

Если в одном и том же файле, то все нормально.

Но если в другом файле, то template - это не HTMLElement или что-то подобное, а просто код (строка), который нужно еще куда-то вставлять. И здесь не пройти мимо хотя бы одного innerHTML, и js-код получается неработающий.

---

Пока обхожусь тем, что делаю два файла - html и js отдельно. Html загружаю и вставляю через innerHTML, а js-файл запускаю через динамический импорт - import('jsAddress'). И не перезатираю дивы с состояниями центральной панели, только делаю их невидимыми. js-код работает, включая Vue.


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