Мне нужно получить динамический компонент для встраивания в iframe. Единственный подход, который я видел для достижения этой цели, использует createComponent для динамического создания нового экземпляра данного компонента, а затем перемещает его в тело iframe.
Проблема с этим подходом заключается в том, что стили не переносятся, потому что динамический компонент создается на родительской странице и копируется, но стили внедряются в заголовок родительской страницы и не идут с ней.
Я думаю, что способ решить эту проблему — либо придумать способ вручную перенести сгенерированные стили в iframe, либо каким-то образом сгенерировать компонент внутри самого iframe, чтобы стили отображались внутри.
Вот пример проблемы: https://stackblitz.com/edit/angular-ivy-ajo1gy?file=src/app/app.component.ts
Любые предложения или идеи очень ценятся! Спасибо, что посмотрели!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я не знаю, можете ли вы получить стили, связанные с компонентом, поэтому у вас осталось:
public ngAfterViewInit(): void {
setTimeout(() => {
// get reference to loaded iframe document
this.frameDoc =
this.contentFrame.nativeElement.contentDocument ||
this.contentFrame.nativeElement.contentWindow;
this.frameDoc.body.appendChild(this.contentRef.location.nativeElement);
const style = document.createElement("style");
style.innerHTML = `
h1 {
color: blue;
}
`;
this.frameDoc.body.appendChild(style);
}, 1000);
}
this.contentRef.location.nativeElement будет содержать вычисленный встроенный стиль, как только он появится в iframe (не проверял это).@Component({
selector: "hello",
template: `<h1 [style.color] = "'blue'">Content Window - I should be blue</h1>`
})
export class HelloComponent {}
@Component({
selector: "hello",
template: `
<h1 [ngStyle] = "{'color': 'blue'}">Content Window - I should be blue</h1>`,
})
export class HelloComponent {}
У меня были разные результаты с разными подходами, особенно в разных браузерах и на разных платформах. В конце концов, я просто использовал встроенные стили в самом шаблоне с интерполяцией шаблона для геттеров, где нужны были динамические значения. Не самый чистый подход, но если вы уже используете iframe для скрытия альтернативных шаблонов, я думаю, вы уже попали в кроличью нору.