У меня есть компонент с элементом <iframe> внутри.
Этот компонент вызывается для маршрута.
Когда компонент вызывается, элемент <iframe> перезагружает контент, но мне нужно загрузить это содержимое только один раз. Для этого мне нужно будет отменить уничтожение этого компонента.
Я попытался переместить этот <iframe> в элемент <body>, когда вызывается onDestroy, и повторно использовать его, когда этот компонент вызывается снова, но когда вы перемещаете <iframe> другому родителю, его содержимое перезагружается.
Есть у кого-нибудь представление, как это сделать?
Вы не обязаны хранить свой компонент: вы вынуждены хранить свой iframe. Компоненты, которые не используются, необходимо уничтожить. Просто загрузите свой iframe в глобальную переменную (или в службу) и загрузите его вместе со своим компонентом при загрузке.
@Suryan: CanDeactivate не может мне помочь, потому что мне нужно менять экраны, когда я меняю маршрут.
@trichetriche - я знаю, но если я изменю отца элемента <iframe>, <iframe> будет загружен снова.
У него не должно быть "отца" для начала ... Ваш iframe должен быть создан с полным JS и сохранен в переменной, это была моя точка
@trichetriche - я понимаю вашу точку зрения, но когда вы помещаете элемент <iframe> внутрь нового элемента, ваш контент будет перезагружен.
Вы уверены, что ? Вы можете использовать appendChild и removeChild и сохранить переменную, я не уверен, что она перезагружает фрейм ... (но я далек от эксперта в этом вопросе)
@trichetriche - Я тоже далек от эксперта в этом вопросе, ккк .. Ну, я тестировал это и реакция компонента была такой.





Я считаю, что вы ищете RouteReuseStrategy.
Вместо того, чтобы уничтожать + воссоздавать компоненты при последующих посещениях, вы можете повторно использовать свои маршруты.
См. Реализацию в этот ответ.
Спасибо, но эта стратегия не решает проблему с элементом iframe. Я тоже пробовал.
Я решил свою проблему!
Я создал компонент с position: fixed, на один уровень выше компонента router-outlet.
Когда пользователь входит в маршрут, ngAfterViewInit будет вызывать фиксированный компонент, чтобы показать iframe.
Когда пользователь выйдет из маршрута, OnDestroy вызовет метод, чтобы скрыть iframe.
Попробуйте этот stackoverflow.com/questions/48514644/…