我已安装ng2-pdf-viewer以便在angular 6应用程序中显示文档。
要使其正常工作,我需要在要使用FeatureModule
组件的<ng2-pdf-viewer>
中导入PdfViewerModule。
问题出在PdfViewerModule
中,它在其函数内调用Element和Window对象,并且在服务node server.js
时会崩溃。
目前,我的模块是这样导入的:
BrowserModule > AppModule > FeatureModule > PdfViewerModule(declare <ng2-pdf-viewer>)
通常,我可以通过将特定的模块直接导入BrowserModule
并为ServerModule
提供一些定制创建的模拟模块来解决此类问题,这些模块可以声明相同名称的<ng2-pdf-viewer>
模拟。
我考虑过的解决方案是将PdfViewerModule
直接导入BrowserModule
中,如下所示:
BrowserModule(imports PdfViewerModule) > AppModule > FeatureModule
但是在这种情况下,FeatureModule
的组件无法访问其模板中的<ng2-pdf-viewer>
,因为未声明。
是否可以将PdfViewerModule
与服务器端执行隔离,但保留其声明?
也许在这种情况下绝对有不同的方法?
先谢谢您! :)
答案 0 :(得分:0)
我认为这应该可以解决问题。
<ng2-pdf-viewer *ngIf="isBrowser"></ng2-pdf-viewer>
isBrowser: boolean;
constructor(@Inject(PLATFORM_ID) private platformId: string) {
this.isBrowser = isPlatformBrowser(platformId);
}
*ngIf
指令应阻止您的PDF渲染器执行
编辑:不起作用,因为浏览器javascript代码甚至在组件初始化之前(在模块声明中)就执行了
正如您已经想到的那样,您可以尝试根据自己的需要调整此解决方案Need BrowserAnimationsModule in Angular but gives error in Universal,您将有一个AppBrowserModule
可以导入AppModule
以及您将创建的另一个模块,它将包装PdfViewerModule
,使用它的组件及其关联的路由。