Angular 将一个组件留给另一个组件时是否取消后台进程?

Angular 将一个组件留给另一个组件时是否取消后台进程?,angular,ionic-framework,Angular,Ionic Framework,我正在使用这个图书馆: 我已经创建了一个存储库,其中有一个问题示例 我正在生成一个pdf文件,而且效果很好。但是,如果pdf尚未完成加载,而我导航到另一个组件,则会出现错误 基本上,当我返回预览时,我会遇到一个问题,因为正在加载的pdf无法取消。我不知道在任何时候我能做些什么来摆脱文档视图 ionViewDidLoad(){ this.archivo_adjunto=“/assets/documents/Resumen Ejecutivo autoevaluation.pdf” } 这

我正在使用这个图书馆:

我已经创建了一个存储库,其中有一个问题示例

我正在生成一个pdf文件,而且效果很好。但是,如果pdf尚未完成加载,而我导航到另一个组件,则会出现错误

基本上,当我返回预览时,我会遇到一个问题,因为正在加载的pdf无法取消。我不知道在任何时候我能做些什么来摆脱文档视图


ionViewDidLoad(){
this.archivo_adjunto=“/assets/documents/Resumen Ejecutivo autoevaluation.pdf”
}
这是在爱奥尼亚完成的,但功能是角度的。

@Input()src
签入
loadPDF()

ngOnChanges
事件上调用此方法

  ngOnChanges(changes: SimpleChanges) {
    if (isSSR()) {
      return;
    }

    if ('src' in changes) {
      this.loadPDF();
    } else if [. . .]
  }
我相信您只需在退出页面时,将当前位于
archivo_adjunto
中的
src
的值更改为
未定义的
null
。可能在
IONVIEW将离开
IONVIEW将卸载
,或者在
ngondestory
上。更改
src
值应触发
PdfViewerComponent
中的
ngochanges
,然后调用
loadPDF()


让我知道什么对您有效。

只需实现
OnDestroy
,并在您的组件中定义一个名为
ngondstroy
的方法。处理清理/取消正在进行的工作。 每当从DOM中删除任何组件时,都会自动调用此方法

export class MyComponent implements OnDestroy() {
    //...

    ngOnDestroy() {
       // do the work here
    }

    //...
}

在大型应用程序或处理大量观察对象或主题或行为主题的组件中,最好在离开组件时取消订阅观察对象,以防止内存泄漏或系统速度减慢等问题


 ngOnDestroy(){
   this.ObservableOrSubsject1$.unsubscribe();
   this.ObservableOrSubsject2$.unsubscribe();
   ....
 }
也不要忘记对类实现OnDestroy

导出MyComponent实现OnInit、OnDestroy

还有另一个我喜欢的好方法,你可以在处理订阅时使用;您可以在其中提供以下主题:

private onDestroy$:Subject=new Subject()

使用任何可观察(例如:映射或订阅)管道时,直到:

ngOnInit(){
   this.ObservableOrSubsject1
     .pipe(takeUntil(this.onDestroy$))
     .subscribe((result: IResult) => {
       this.result= Object.assign({}, result);
   });
在Ngondestory中,只需传递“this.ondestory$.next()”:

同样,不要忘记对类实现OnDestroy


最后,我建议使用Ngrx/Store和Ngrx/Effects来管理您的状态并统一应用程序中的事件;这将为您省去许多麻烦,并使您的应用程序保持在标准体系结构中。

如果您可以手动停止加载PDF,只需将该代码添加到
ngondestory()
中即可。当您更改路径并停止加载PDF的过程时,它将被调用。如何在ionic中导入它?这看起来像是一个问题,但如果在PDF准备就绪时触发
(页面呈现)
事件,您可以阻止用户使用
IoninViewCanLeave
生命周期事件关闭页面。这不是对错误的修复,而是在库所有者修复该问题之前防止错误发生的一种方法。如果您认为这可能有帮助,请让我知道,我会写一个更详细的答案。@sebafereras您是否假装在呈现pdf之前,用户不能离开当前视图?我想看看你的解决方案,这不是一个优雅的解决方案,但也许它可以工作。我希望你能告诉我怎么做,如果你表现良好,最好的答案就是你的。@yavg hi。。你有解决办法吗?否则我可以花点时间在你分享的回购协议上。。请尽快告诉我。

 ngOnDestroy(){
   this.ObservableOrSubsject1$.unsubscribe();
   this.ObservableOrSubsject2$.unsubscribe();
   ....
 }
ngOnInit(){
   this.ObservableOrSubsject1
     .pipe(takeUntil(this.onDestroy$))
     .subscribe((result: IResult) => {
       this.result= Object.assign({}, result);
   });
ngOnDestroy(){
   this.onDestroy$.next();
 }