У меня проблема в том, что мне нужно показать iframe
в приложении Angular 6.Этот элемент должен присутствовать для всех маршрутов модуля (загружен ленивым).В приложении есть и другие модули, которым не нужно показывать iframe
.
. Таким образом, глобальное решение, подобное этому, может работать, но это не то, что я ищу:
<!-- app.component.html -->
<app-iframe></app-iframe>
<router-outlet></router-outlet>
Допустим, маршрутизация в этом модуле выглядит следующим образом:
const routes: Routes = [
{
path: '',
component: FirstComponent
},
{
path: 'route-2',
component: SecondComponent
},
{
path: 'route-3',
component: ThirdComponent
}
];
Теперь в моем модуле я не могу просто создать компонент, такой как IframeComponent
, и вставить его в другие компоненты, такие как:
<!-- first.component.html -->
<h1>Content of this component</h1>
<app-iframe></app-iframe>
Это потому, что каждый раз, когда загружается другой маршрут модуля, IframeComponent
перезагружается, как и фактический элемент iframe
.
Я также не могу кешировать iframe
Элемент DOM в Сервисе, так как повторная вставка все равно вызовет перезагрузку.См .: Как предотвратить перезагрузку iframe при его перемещении в DOM .
Мой вопрос:
Как указать компонент, который отображается один раз какПока работает модуль, независимо от того, какой маршрутизатор из этого модуля называется.
Результат может выглядеть следующим образом:
<router-outlet></router-outlet>
<app-first></app-first>
<app-iframe></app-iframe>
И после перехода на module-url/route-3
:
<router-outlet></router-outlet>
<app-third></app-third> <!-- only this changed -->
<app-iframe></app-iframe>
А после перехода на другой модуль:
<router-outlet></router-outlet>
<app-another-component></app-another-component>