Angular ng2-pdfjs-viewer 与 ngIf 一起使用时会破坏 html 页面
Angular ng2-pdfjs-viewer when used with ngIf breaks the html page
我一直在 Angular 组件中使用 ng2-pdfjs-viewer。但是,仅当满足条件时,我才需要 div 元素在 DOM 中占据 space 。所以我使用 *ngIf 作为 div。但是,当我使用 ngIf 时,页面中断。在控制台中,它在 main window 中没有显示任何错误。在控制台边栏中,vendor.js 中有 4 个错误的通知。但是,看不到错误。
component.html: 使用ng2-pdfjs-viewer的部分
<div *ngIf='id'>
/// more code ///
<div class='flex' *ngIf="pdfViewerAutoLoadCE.pdfSrc || pdfViewerAutoLoadJD.pdfSrc">
//// this is the *ngIf causing problem
<div style="width: 49%; height: 60vh; margin-right: 1%;">
<ng2-pdfjs-viewer #pdfViewerAutoLoadCE
[download]="false" [print]="false" [openFile]="false"
[fullScreen]='false'></ng2-pdfjs-viewer>
</div>
<div style="width: 49%; height: 60vh;" >
<ng2-pdfjs-viewer #pdfViewerAutoLoadJD
[download]="false" [print]="false" [openFile]="false"
[fullScreen]='false'></ng2-pdfjs-viewer>
</div>
</div>
</div>
如果我删除 div 的 ngIf 条件,页面将正确显示。我尝试检查条件的有效性或使用任何其他条件,但是,使用 ngIf 时页面会中断。
我在这里遗漏了什么吗?请帮忙。
编辑:
添加渲染组件的屏幕截图,
在 pdfViewer 上没有 ngIf div:正确呈现元素。
使用 ngIf(将变量分配为 true 或 false 的简单条件)
<div class='flex' *ngIf="isLoading">
<div style="width: 49%; height: 60vh; margin-right: 1%;">
<ng2-pdfjs-viewer #pdfViewerAutoLoadCE
[download]="false" [print]="false" [openFile]="false"
[fullScreen]='false'></ng2-pdfjs-viewer>
</div>
<div style="width: 49%; height: 60vh;" >
<ng2-pdfjs-viewer #pdfViewerAutoLoadJD
[download]="false" [print]="false" [openFile]="false"
[fullScreen]='false'></ng2-pdfjs-viewer>
</div>
</div>
渲染错误。当 isLoading 设置为 false 时,pdfViewer div 从 DOM 中消失,但页面呈现混乱,如下所示。
即使将 isLoading 设置为 true,渲染也会混乱。
不知道 pdfViewerAutoLoadCE.pdfSrc || pdfViewerAutoLoadJD.pdfSrc
的内容,也没有看到“页面损坏”的效果,因此很难确定问题出在哪里。但是,如果您将 pdf 查看器包装在 ng-container 中,并设置了是否显示 pdf 的条件怎么办?
如有必要,请将 ng-container
调整到只有 pdf-viewer 受到影响的深度,以便您的顶级 div 留在模板中。这应该有助于保持您的页面完好无损。
<ng-container *ngIf="someCondition">
<pdf-viewer></pdf-viewer>
</ng-container>
我提供了一个简单的例子:https://stackblitz.com/edit/ng2-pdf-viewer-tvpgs4?file=src%2Fapp%2Fapp.component.html
如果问题仍然存在,请进行 stackblitz 重现该问题。
看到您的屏幕截图后,仍然很难发现问题,但您的模板似乎依赖于您要删除的一些 div 占位符。
<div class="flex">
<div style="width: 49%; height: 60vh; margin-right: 1%;">
<ng-container *ngIf="isLoading>
<ng2-pdfjs-viewer #pdfViewerAutoLoadCE
[download]="false" [print]="false" [openFile]="false"
[fullScreen]='false'></ng2-pdfjs-viewer>
</ng-container>
</div>
<div style="width: 49%; height: 60vh;" >
<ng-container *ngIf="isLoading>
<ng2-pdfjs-viewer #pdfViewerAutoLoadJD
[download]="false" [print]="false" [openFile]="false"
[fullScreen]='false'></ng2-pdfjs-viewer>
</ng-container>
</div>
</div>
如果以上没有帮助,那么可能 div 的大小取决于 ng-2-pdfjs-viewer 在模板中的存在。您应该重构育儿 div 以在模板中使用或不使用 pdf。
我一直在 Angular 组件中使用 ng2-pdfjs-viewer。但是,仅当满足条件时,我才需要 div 元素在 DOM 中占据 space 。所以我使用 *ngIf 作为 div。但是,当我使用 ngIf 时,页面中断。在控制台中,它在 main window 中没有显示任何错误。在控制台边栏中,vendor.js 中有 4 个错误的通知。但是,看不到错误。
component.html: 使用ng2-pdfjs-viewer的部分
<div *ngIf='id'>
/// more code ///
<div class='flex' *ngIf="pdfViewerAutoLoadCE.pdfSrc || pdfViewerAutoLoadJD.pdfSrc">
//// this is the *ngIf causing problem
<div style="width: 49%; height: 60vh; margin-right: 1%;">
<ng2-pdfjs-viewer #pdfViewerAutoLoadCE
[download]="false" [print]="false" [openFile]="false"
[fullScreen]='false'></ng2-pdfjs-viewer>
</div>
<div style="width: 49%; height: 60vh;" >
<ng2-pdfjs-viewer #pdfViewerAutoLoadJD
[download]="false" [print]="false" [openFile]="false"
[fullScreen]='false'></ng2-pdfjs-viewer>
</div>
</div>
</div>
如果我删除 div 的 ngIf 条件,页面将正确显示。我尝试检查条件的有效性或使用任何其他条件,但是,使用 ngIf 时页面会中断。
我在这里遗漏了什么吗?请帮忙。
编辑: 添加渲染组件的屏幕截图,
在 pdfViewer 上没有 ngIf div:正确呈现元素。
使用 ngIf(将变量分配为 true 或 false 的简单条件)
<div class='flex' *ngIf="isLoading">
<div style="width: 49%; height: 60vh; margin-right: 1%;">
<ng2-pdfjs-viewer #pdfViewerAutoLoadCE
[download]="false" [print]="false" [openFile]="false"
[fullScreen]='false'></ng2-pdfjs-viewer>
</div>
<div style="width: 49%; height: 60vh;" >
<ng2-pdfjs-viewer #pdfViewerAutoLoadJD
[download]="false" [print]="false" [openFile]="false"
[fullScreen]='false'></ng2-pdfjs-viewer>
</div>
</div>
渲染错误。当 isLoading 设置为 false 时,pdfViewer div 从 DOM 中消失,但页面呈现混乱,如下所示。 即使将 isLoading 设置为 true,渲染也会混乱。
不知道 pdfViewerAutoLoadCE.pdfSrc || pdfViewerAutoLoadJD.pdfSrc
的内容,也没有看到“页面损坏”的效果,因此很难确定问题出在哪里。但是,如果您将 pdf 查看器包装在 ng-container 中,并设置了是否显示 pdf 的条件怎么办?
如有必要,请将 ng-container
调整到只有 pdf-viewer 受到影响的深度,以便您的顶级 div 留在模板中。这应该有助于保持您的页面完好无损。
<ng-container *ngIf="someCondition">
<pdf-viewer></pdf-viewer>
</ng-container>
我提供了一个简单的例子:https://stackblitz.com/edit/ng2-pdf-viewer-tvpgs4?file=src%2Fapp%2Fapp.component.html
如果问题仍然存在,请进行 stackblitz 重现该问题。
看到您的屏幕截图后,仍然很难发现问题,但您的模板似乎依赖于您要删除的一些 div 占位符。
<div class="flex">
<div style="width: 49%; height: 60vh; margin-right: 1%;">
<ng-container *ngIf="isLoading>
<ng2-pdfjs-viewer #pdfViewerAutoLoadCE
[download]="false" [print]="false" [openFile]="false"
[fullScreen]='false'></ng2-pdfjs-viewer>
</ng-container>
</div>
<div style="width: 49%; height: 60vh;" >
<ng-container *ngIf="isLoading>
<ng2-pdfjs-viewer #pdfViewerAutoLoadJD
[download]="false" [print]="false" [openFile]="false"
[fullScreen]='false'></ng2-pdfjs-viewer>
</ng-container>
</div>
</div>
如果以上没有帮助,那么可能 div 的大小取决于 ng-2-pdfjs-viewer 在模板中的存在。您应该重构育儿 div 以在模板中使用或不使用 pdf。