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