Угловой - мне нужно избежать разрушения компонента

У меня есть компонент с элементом <iframe> внутри.

Этот компонент вызывается для маршрута.

Когда компонент вызывается, элемент <iframe> перезагружает контент, но мне нужно загрузить это содержимое только один раз. Для этого мне нужно будет отменить уничтожение этого компонента.

Я попытался переместить этот <iframe> в элемент <body>, когда вызывается onDestroy, и повторно использовать его, когда этот компонент вызывается снова, но когда вы перемещаете <iframe> другому родителю, его содержимое перезагружается.

Есть у кого-нибудь представление, как это сделать?

Попробуйте этот stackoverflow.com/questions/48514644/…

Suryan 25.10.2018 15:04

Вы не обязаны хранить свой компонент: вы вынуждены хранить свой iframe. Компоненты, которые не используются, необходимо уничтожить. Просто загрузите свой iframe в глобальную переменную (или в службу) и загрузите его вместе со своим компонентом при загрузке.

user4676340 25.10.2018 15:15

@Suryan: CanDeactivate не может мне помочь, потому что мне нужно менять экраны, когда я меняю маршрут.

Sandro Santos 25.10.2018 15:24

@trichetriche - я знаю, но если я изменю отца элемента <iframe>, <iframe> будет загружен снова.

Sandro Santos 25.10.2018 15:26

У него не должно быть "отца" для начала ... Ваш iframe должен быть создан с полным JS и сохранен в переменной, это была моя точка

user4676340 25.10.2018 15:28

@trichetriche - я понимаю вашу точку зрения, но когда вы помещаете элемент <iframe> внутрь нового элемента, ваш контент будет перезагружен.

Sandro Santos 25.10.2018 15:47

Вы уверены, что ? Вы можете использовать appendChild и removeChild и сохранить переменную, я не уверен, что она перезагружает фрейм ... (но я далек от эксперта в этом вопросе)

user4676340 25.10.2018 16:08

@trichetriche - Я тоже далек от эксперта в этом вопросе, ккк .. Ну, я тестировал это и реакция компонента была такой.

Sandro Santos 25.10.2018 16:18
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
3
8
7 528
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я считаю, что вы ищете RouteReuseStrategy.

Вместо того, чтобы уничтожать + воссоздавать компоненты при последующих посещениях, вы можете повторно использовать свои маршруты.

См. Реализацию в этот ответ.

Спасибо, но эта стратегия не решает проблему с элементом iframe. Я тоже пробовал.

Sandro Santos 25.10.2018 20:30
Ответ принят как подходящий

Я решил свою проблему!

Я создал компонент с position: fixed, на один уровень выше компонента router-outlet.

Когда пользователь входит в маршрут, ngAfterViewInit будет вызывать фиксированный компонент, чтобы показать iframe.

Когда пользователь выйдет из маршрута, OnDestroy вызовет метод, чтобы скрыть iframe.

Другие вопросы по теме