angular - ng2-pdf-viewer'da yükleme iptal edilirse işçi sonlanır


Angular uygulamamda bir master-detail görünümüm var. Master, bir öğe listesidir. Bir öğeyi seçerek, öğeye ait PDF'leri detayda gösteriyorum. PDF'leri görüntülemek için ng2-pdf-viewer kullanıyorum. Mevcut öğenin tüm PDF'leri tamamen yüklenmeden başka bir öğe seçersem, aşağıdaki hataları alıyorum:

Uncaught (in promise) Error: Worker was terminated
    at ensureNotTerminated (pdf.worker.js:sourcemap:274)
    at onFailure (pdf.worker.js:sourcemap:476)

ve :

pdf_viewer.js:5606 Unable to initialize viewer Error: Transport destroyed
    at pdf.js:3448
    at ZoneDelegate.invoke (zone-evergreen.js:364)
    at Object.onInvoke (core.js:27149)
    at ZoneDelegate.invoke (zone-evergreen.js:363)
    at Zone.run (zone-evergreen.js:123)
    at zone-evergreen.js:857
    at ZoneDelegate.invokeTask (zone-evergreen.js:399)
    at Object.onInvokeTask (core.js:27137)
    at ZoneDelegate.invokeTask (zone-evergreen.js:398)
    at Zone.runTask (zone-evergreen.js:167)
ERROR Error: Uncaught (in promise): Error: Transport destroyed
Error: Transport destroyed
    at pdf.js:3448
    at ZoneDelegate.invoke (zone-evergreen.js:364)
    at Object.onInvoke (core.js:27149)
    at ZoneDelegate.invoke (zone-evergreen.js:363)
    at Zone.run (zone-evergreen.js:123)
    at zone-evergreen.js:857
    at ZoneDelegate.invokeTask (zone-evergreen.js:399)
    at Object.onInvokeTask (core.js:27137)
    at ZoneDelegate.invokeTask (zone-evergreen.js:398)
    at Zone.runTask (zone-evergreen.js:167)
    at resolvePromise (zone-evergreen.js:798)
    at resolvePromise (zone-evergreen.js:750)
    at zone-evergreen.js:860
    at ZoneDelegate.invokeTask (zone-evergreen.js:399)
    at Object.onInvokeTask (core.js:27137)
    at ZoneDelegate.invokeTask (zone-evergreen.js:398)
    at Zone.runTask (zone-evergreen.js:167)
    at drainMicroTaskQueue (zone-evergreen.js:569)
    at ZoneTask.invokeTask [as invoke] (zone-evergreen.js:484)
    at invokeTask (zone-evergreen.js:1621)

Başka bir öğeye tıkladığınızda eski detay bileşeni yok edilecek ve yeni bir tane oluşturulacak. Detay görünümü için kendi önizleyici bileşenimi uyguladım:

<mat-card *ngFor="let document of documentListObs | async" >
      <mat-card-content (click)="showDocument(document)" class="fill-container">
        <pdf-viewer *ngIf="isPdfSource(document)"
          [src]="!abort ? document.fileData : null"
          [original-size]="false"
          [show-all]="false"
          [page]="1"
          [autoresize]="false"
          (error)="onError($event)"
        >
        </pdf-viewer>
      </mat-card-content>
</mat-card>

documentListObs, typescript kodunda şu şekilde tanımlanmıştır:

  @Input() public documentListObs: Observable<BmdDocument[]>;

Bileşenin ngOnDestroy'unda pdf-viewer'ın src özelliğini null olarak sıfarlamaya çalıştım ... ama herhangi bir başarı elde edemedim:

  ngOnDestroy() {
    this.abort = true;
  }

Yardımlar için teşekkürler!

İlgili makaleler