1

我已经安装了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与服务器端执行隔离,但保留其声明?也许在这种情况下有绝对不同的方法?

先感谢您!:)

4

1 回答 1

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 代码甚至在组件初始化之前执行(在模块声明中)

正如您已经想到的那样,您可以尝试在 Angular 中调整此解决方案 Need BrowserAnimationsModule 但在 Universal中根据您的需要给出错误,您将拥有一个AppBrowserModule导入AppModule以及另一个您要创建的模块,该模块将包装PdfViewerModule使用的组件它及其相关的路线。

于 2018-11-06T10:17:13.367 回答