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

Pac*_*Pac 1 nativescript

所以我用这个功能来处理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']);
                });
            });
        }
    })   
Run Code Online (Sandbox Code Playgroud)

on different pages (angular components). So on page1.ts I have navigate(['/parameters]) and on page2.ts I have console.log("test"). Problem is wherever I am in the app, pressing back button always do navigate(['/parameters]), also the console.log if i'm on the right page, but it should do console.log only. It seems to be global, any idea how to override activityBackPressedEvent ?

Man*_*noj 6

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
            });
        }
    });
Run Code Online (Sandbox Code Playgroud)

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

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

// 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']);
            });
}
Run Code Online (Sandbox Code Playgroud)

  • 从 `import * as application from "tns-core-modules/application"` (2认同)
  • `从“tns-core-modules/ui/frame”导入 * 作为框架` (2认同)