angular - 如何在打印页面之前等待 DOM 完全加载?

标签 angular dom angular8 printing-web-page

当尝试在我的 Angular 应用程序上打印页面时,无论是使用 window.print() 还是按 Ctrl + P,打印窗口都会打开,但不会显示页面上的大部分内容。取消第一次尝试后,第二次尝试将在打印窗口中正确呈现页面,但重新加载应用程序将恢复为无法在打印窗口中正确显示内容。

显示的内容有几个<div>样式化为边框的元素,以及组件树中非常靠上的父组件部分(导航栏组件的一部分和整个页脚组件,它们是应用程序组件的直接子组件)。

发生这种情况时,所有内容都正确显示在页面上,并包装在 <ng-container *ngIf="!loading"> 中元素。当接收到所有组件数据时,加载设置为 false。

组件加载如下:

ngOnInit() {
  this.load();
}

load() {
  // data is loaded from a service
  this.loading = false;
  setTimeout(window.print(), 500);
}

我试过调用 window.print()在其他生命周期 Hook (ngAfterContentInit、ngAfterViewInit)中发挥作用,但没有明显变化。

我也试过设置更长的超时时间,最多 20 秒,但也没有明显的区别。

编辑 我尝试记录 document.ready在打印尝试之前到控制台,它记录为 complete

编辑 2 看来问题源于样式表在 window.print() 时未完全加载。叫做。由于主样式表非常大,我通过将组件的 CSS 移动到一个单独的文件来管理创可贴修复。虽然方案不是最优的,但已经解决了问题。

这是在 window.print() 时 DOM 没有完全加载和渲染的情况吗?函数被调用?如果是这样,我如何在尝试打印页面之前确保它是正确的?

最佳答案

尝试使用afterviewInt()

ngAfterViewInit() {
   this.load();
}

关于angular - 如何在打印页面之前等待 DOM 完全加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58332600/

相关文章:

Angular 7, Protractor ,随机错误 "both angularJS testability and angular testability are undefined"

angular - 如何在 Angular 2 的 HTML 文件中使用 routerLink?

javascript - Angular 8 中通过引用调用组件数组属性

Angular 8 ngrx存储如何在没有订阅回调的情况下获取reducer值?

Angular2,调用服务函数,无法读取未定义的属性 '***'

angular - 如何使用forkJoin处理Observable数组的错误?

javascript - $ ('#id' ) 返回 [对象对象]

javascript - DOM 加载被后续脚本阻止

javascript - 使用大型动态 DOM 树创建大型稳定的 Web 应用程序

javascript - Angular:日期时区全局参数设置