You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ngx-extended-pdf-viewer页面刷新后间隔一段时间打开组件无法加载PDF

ngx-extended-pdf-viewer延迟进入无法加载PDF解决方案

该故障是10.0.0-alpha.8测试版的已知问题,核心是PDFJS Worker闲置自动销毁后,测试版未适配路由场景下的Worker自动重启逻辑,且组件销毁时未正确释放旧资源导致新实例初始化失败,可按以下步骤排查修复:

  • 补充组件销毁资源释放逻辑
    组件卸载时手动清空PDF实例和Worker资源,避免残留上下文影响下一次组件初始化,代码示例如下:
    import { Component, OnDestroy } from '@angular/core';
    import { NgxExtendedPdfViewerService } from 'ngx-extended-pdf-viewer';
    
    @Component({
      // 你的原有组件配置
    })
    export class PDFViewerComponent implements OnDestroy {
      pdfSrc = '';
      constructor(private pdfService: NgxExtendedPdfViewerService) {}
    
      ngOnDestroy(): void {
        this.pdfService?.destroy();
        this.pdfSrc = '';
      }
    }
    
  • 禁用Worker闲置超时回收
    1-2分钟的间隔刚好触发PDFJS默认的Worker闲置自动销毁机制,alpha版本未适配重启逻辑,可在组件初始化时禁用该规则,同时延后赋值PDF地址确保组件挂载完成后再启动渲染:
    ngOnInit(): void {
      (window as any).pdfWorkerOptions = {
        workerIdleTime: 0
      };
      setTimeout(() => {
        this.pdfSrc = '你的PDF资源地址';
      }, 0);
    }
    
  • 升级到稳定版依赖
    你当前使用的是alpha测试版本,存在大量路由场景适配bug,执行命令npm i ngx-extended-pdf-viewer@^10.0.0安装10.x正式版即可修复大部分已知兼容问题。
  • 路由复用场景额外适配
    如果你的项目开启了路由复用策略缓存组件实例,需要监听路由跳转事件,每次进入PDF页面时手动触发重加载:
    import { NavigationEnd, Router } from '@angular/router';
    import { filter } from 'rxjs';
    
    constructor(private router: Router, private pdfService: NgxExtendedPdfViewerService) {
      this.router.events.pipe(
        filter(event => event instanceof NavigationEnd),
        filter(event => event.url.includes('你的PDF页面路由路径'))
      ).subscribe(() => {
        this.pdfService?.reload();
      })
    }
    

故障效果截图:
PDF加载失败效果

内容的提问来源于stack exchange,提问作者Shubham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:18:03