Nativescript Angular:处理不同页面上的Android后退按钮

2024-04-27

所以我使用这个函数来处理android后退按钮:

this._page.on(Page.loadedEvent, event => {
        if (application.android) {
            application.android.on(application.AndroidApplication.activityBackPressedEvent, (args:AndroidActivityBackPressedEventData) => {      
                args.cancel = true;
                this._ngZone.run(() => {
                this.router.navigate(['/parameters']);
                });
            });
        }
    })   

在不同的页面上(角度分量)。所以在 page1.ts 上我有 navigation(['/parameters]) ,在 page2.ts 上我有 console.log("test") 。问题是我在应用程序中的任何位置,按后退按钮总是会执行导航(['/parameters]),如果我在正确的页面上,也会执行 console.log,但它应该执行 console.logonly。 它似乎是全局的,知道如何覆盖 ActivityBackPressedEvent 吗?


activityBackPressedEvent不是特定于页面的,它对于包含所有页面的活动来说是全局的。通常,您不会向该事件添加多个事件侦听器。

您可以执行类似下面的操作来在页面级别处理此问题,可能在应用程序模块/中main.ts

application.android.on(application.AndroidApplication.activityBackPressedEvent,
    (args: application.AndroidActivityBackPressedEventData) => {
        const page = frame.topmost().currentPage;
        if (page.hasListeners(application.AndroidApplication.activityBackPressedEvent)) {
            args.cancel = true;
            page.notify({
                eventName: application.AndroidApplication.activityBackPressedEvent,
                object: page
            });
        }
    });

有了上面的代码,activityBackPressedEvent将在每个具有侦听器的页面上触发。

现在,在您想要自定义行为的页面/组件中执行此操作,

// Inject Page
constructor(private page: Page) { 
   this.page.on(application.AndroidApplication.activityBackPressedEvent, this.onBackButtonTap, this);
}

onBackButtonTap(data: EventData) {
            this._ngZone.run(() => {
                this.router.navigate(['/parameters']);
            });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nativescript Angular:处理不同页面上的Android后退按钮 的相关文章

随机推荐