如何在Angular中销毁Nativescript生命周期的applicationOn事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Angular中销毁Nativescript生命周期的applicationOn事件相关的知识,希望对你有一定的参考价值。

在我的Nativescript + Angular手机应用程序中,我设法通过将它们放入构造函数来监听暂停和恢复事件,如下所示:

export class HomeComponent 
    constructor(private router: RouterExtensions,
            private tokenService: TokenStoreService) 

        applicationOn(suspendEvent, (args: ApplicationEventData) => 
            tokenService.bioscanSetAuthenticated(false);
            tokenService.setLastRoute(this.router.router.url);
        );

        applicationOn(resumeEvent, (args: ApplicationEventData) => 
            if (this.tokenService.bioScanIsAuthenticated()) 
                return;
            
            this.router.navigate(['/login'],  animated: false, clearHistory: true );
        );
    

这很好用,并且应用程序的行为符合预期,但是当从这些applicationOn方法中将注释记录到控制台输出时,我注意到每次应用程序暂停和恢复时都会发出其他注释。这表明每次加载类而不是被销毁时都会重新创建applicationOn事件。

有没有更好的方法呢?

答案

我建议在具有根作用域的服务中处理全局事件(如applicationOn),该作用域可能只初始化一次。该服务可以托管在恢复/暂停事件时将发出的主题/观察者。

但是,如果您喜欢当前问题的热修复,请删除destroy生命周期回调中的事件侦听器。

import  applicationOff as off  from from "tns-core-modules/application";

....

ngOnDestroy() 
    // This will remove all active event listeners at once, 
    // If you want to remove one particular listener, you will have to pass the function reference as second parameter
    applicationOff(suspendEvent);
    applicationOff(resumeEvent);

以上是关于如何在Angular中销毁Nativescript生命周期的applicationOn事件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Angular 在 NativeScript 中使用 XML 而不是 Html 进行设计?

如何在 NativeScript Angular 应用程序中初始化 Firebase 推送通知

如何在 nativescript-angular html 文件中添加水平线

NativeScript + Angular:如何安装和使用图标?

如何在nativescript angular中隐藏ios的水平滚动指示器

如何在 nativescript angular 中实现图像缓存