我在此Stackblitz上以最少的代码重现了该问题。
我在新窗口中打开了组件的一部分,但是它仍然应该能够与我的主应用程序进行交互。我使用DomPortalHost实现了这一目标。交互成功完成,但样式未加载到新窗口中。
如何强制新窗口匹配主应用程序的样式?
主应用
窗口:
答案 0 :(得分:3)
您的模式窗口不包含父窗口的CSS样式。所以你必须 自己将其克隆到新窗口,因为cdk门户不应该这样做。
在您的ngOnInit
方法中添加以下步骤:
// STEP 5.1: clone stylesheets and style tags to external window
document.querySelectorAll('link, style').forEach(htmlElement => {
this.externalWindow.document.head.appendChild(htmlElement.cloneNode(true));
});
答案 1 :(得分:1)
1)在资产文件夹中创建一个css文件,其中包含common css
component and external window
并在index.html
或中提供css文件路径
angular.json
,以便组件加载此CSS。
<script>document.write('<link href="/assets/css/appstyles.css?v=' + Date.now() + '" rel="stylesheet" />');</script>
.pin-bg {
background: pink;
width: 255px;
height: 20px;
}
2)将外部窗口的css路径指定为:-
this.externalWindow.document.write('<html><head><link rel="stylesheet" type="text/css" href="assets/css/appstyles.css"></head><body>');
ngOnInit(){
// STEP 4: create an external window
this.externalWindow = window.open('', '', 'width=600,height=400,left=200,top=200');
this.externalWindow.document.write('<html><head><style type="text/css">.pin-bg { background: pink; width:255px; height: 20px;}</style></head><body>');
}
ngOnInit(){
// STEP 4: create an external window
this.externalWindow = window.open('', '', 'width=600,height=400,left=200,top=200');
this.externalWindow.document.write('<html><head><link rel="stylesheet" type="text/css" href="assets/css/appstyles.css"></head><body>');
}
.pin-bg {
background: pink;
width: 255px;
height: 20px;
}
Stackblitz链接:- https://stackblitz.com/edit/angular-open-window-tbd3a4?file=src/app/window.component.ts
答案 2 :(得分:0)
另一个选择是使用内联样式:
style="color:red;background-color:black;"
<window *ngIf="showPortal">
<h2 style="color:red;background-color:black;">Hello world from amother window!!</h2>
<div class="pin-bg">do you see pink ? do you?</div>
<button (click)="this.showPortal = false">Close me!</button>
</window>