【发布时间】:2018-09-28 16:36:57
【问题描述】:
我在 Angular 4 中有一个应用程序。屏幕上有 4 个选项卡('tab1'、'tab2'、'tab3'、'tab4')。每个选项卡都与一个动态加载的角度组件相关联。
当用户登陆着陆页时,默认显示'tab1'。有菜单控制,我们有一个打印按钮。单击此打印按钮后,我必须打印所有选项卡。
以下是我所做的。 为所有动态加载的角度组件赋予“id”。 使用 document.getElementByID('tab1').innerHtml 来获取 innet html。 连接所有选项卡的所有 html。
点击打印按钮调用以下内容:- popupWin = window.open('', '_blank', 'width=' + screen.availWidth + ',height=' + screen.availHeight); popupWin.document.open(); popupWin.document.write(this.renderFullHtmlForPrintingReport(htmlStringToPrint)); [变量 'htmlStringToPrint' 包含所有选项卡中的所有 html。]
popupWin.document.close();
以下是渲染html打印的方法实现:-
renderFullHtmlForPrintingReport(printContents: string): string {
return `
<html>
<head>
<title>Print tab</title>
<link rel="stylesheet" href="assets/bootstrap.css">
<link rel="stylesheet" href="assets/site.css">
</head>
<body><div style="padding-left:10px">${printContents}</div></body>
</html>`
//<body onload="window.print();window.close();"><div style="padding-left:10px">${printContents}</div></body>
}
标签代码:-
<tabset>
<tab *ngFor="let tab of tabs; let i = index" [heading]="tab.title" [active]="tab.active" (select)="tab.active = true" (deselect)="tab.active = false"
[disabled]="tab.disabled" [sClass]="tab.sClass" id="{{i}}">
<br>
<dyna [type]="tab.tabContent" [language]="language" ></ddyna>
</tab>
</tabset>
是一个角度组件,其中组件是动态加载的。
以下是创建标签的方法:-
public tabs: ITab[] = [
{ title: 'B', tabContent: BComponent, templateNum: 0, sClass: "show-class", active: true },
{ title: 'O', tabContent: OComponent, templateNum: 1, sClass: "show-class", active: false },
{ title: 'P', tabContent: PComponent, templateNum: 2, sClass: "show-class", active: false },
{ title: 'BR', tabContent: BrComponent, templateNum: 3, sClass: "show-class", active: false },
{ title: 'FR', tabContent: FrComponent, templateNum: 4, sClass: "show-class", active: false }
];
当点击打印按钮时,一个新的对话框会显示 html,但 html 没有来自各种控件的绑定控件值。似乎正在显示角度组件的默认模板。
我可以使用 ViewChild 并使用共享服务缓存 html,但是对于页面上的每次更改,我都需要更新缓存。
解决方案的任何输入都会有所帮助。
最好的问候, AKing
【问题讨论】:
标签: angular