Nativescript angular:在不同页面上处理android后退按钮

Nativescript angular:在不同页面上处理android后退按钮,nativescript,Nativescript,所以我使用这个函数来处理android后退按钮: this._page.on(Page.loadedEvent, event => { if (application.android) { application.android.on(application.AndroidApplication.activityBackPressedEvent, (args:AndroidActivityBackPressedEventData) => {

所以我使用这个函数来处理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上我有导航(['/parameters]),在page2.ts上我有console.log(“test”)。问题是,无论我在应用程序中的哪个位置,按“后退”按钮都会导航(['/parameters]),如果我在正确的页面上,也会导航console.log,但它应该只导航console.log
它似乎是全局性的,知道如何覆盖activityBackPressedEvent吗?

我认为,因为您在事件
页面加载中添加了handle back按钮,所以它在其他页面上不起作用

处理后退按钮的代码应该放在应用程序启动程序中。我正在使用NS-Vue&我将此代码放在我的
main.js
中。我认为这可能是类似的

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

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

您可以在页面级别执行以下操作来处理此问题,可能是在app module/
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
            });
        }
    });
使用上述代码,将在每个有侦听器的页面上触发ActivityBackpresseEvent

现在,在您希望自定义行为的页面/组件中

// 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']);
            });
}

页面是同级还是父/子级?不,它们链接到不同的模块,所以同级?除非出现问题,否则我看不出一个页面如何能够检测到另一个页面上的背压,我只知道父/子页面可以这样做,这可能是一个很好的解决方案。我无法成功测试,因为尝试时会出现不相关的错误。但我将尝试修复它或测试类似的解决方法,并向您报告。非常感谢。从“tns核心模块/应用程序”的
import*作为应用程序导入“tns核心模块/用户界面/框架”的
import*作为框架导入“tns核心模块/用户界面/框架”
如果您有两个活动的侦听器,请仔细检查,如果问题仍然存在,请共享一个示例。后台侦听器处于活动状态,无论您有多少个框架/子组件。