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

时间:2019-03-22 09:59:41

标签: 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']);
                });
            });
        }
    })   

在不同页面上(角组件)。因此,在page1.ts上,我具有navigation(['/ parameters]),在page2.ts上,我具有console.log(“ test”)。问题是无论我在应用程序中的哪个位置,如果我在正确的页面上,请始终按向后按钮进行导航(['/ parameters]),也可以进行console.log,但仅应进行console.log 。 似乎是全局的,有什么主意如何覆盖activityBackPressedEvent吗?

2 个答案:

答案 0 :(得分:1)

activityBackPressedEvent并非特定于某个页面,它对于保存所有页面的Activity是全局的。通常,您不会向该事件添加多个事件侦听器。

您可以在应用程序模块/ 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']);
            });
}

答案 1 :(得分:0)

我认为,既然您在事件pageLoaded中添加了向后退按钮,这就是为什么它在其他页面上不起作用的原因。

处理后退按钮的代码应放在应用程序启动器中。我正在使用NS Vue,并将此代码放在我的main.js中。我认为在NS角度上可能相似。

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