Nativescript angular:在不同页面上处理android后退按钮
所以我使用这个函数来处理android后退按钮:Nativescript angular:在不同页面上处理android后退按钮,nativescript,Nativescript,所以我使用这个函数来处理android后退按钮: this._page.on(Page.loadedEvent, event => { if (application.android) { application.android.on(application.AndroidApplication.activityBackPressedEvent, (args:AndroidActivityBackPressedEventData) => {
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核心模块/用户界面/框架”
如果您有两个活动的侦听器,请仔细检查,如果问题仍然存在,请共享一个示例。后台侦听器处于活动状态,无论您有多少个框架/子组件。