2016-11-15 176 views
0

我正在尝试处理NativeScript应用程序中的硬件返回按钮。我在Angular上使用NativeScript 2.3.0版本。NativeScript处理返回按钮事件

这是我在main.ts文件

// this import should be first in order to load some required settings (like globals and reflect-metadata) 
import { platformNativeScriptDynamic, NativeScriptModule } from "nativescript-angular/platform"; 
import { NgModule,Component,enableProdMode } from "@angular/core"; 
import { AppComponent } from "./app.component"; 
import { NativeScriptRouterModule } from "nativescript-angular/router"; 
import { routes, navigatableComponents } from "./app.routing"; 
import { secondComponent } from "./second.component"; 
import {AndroidApplication} from "application"; 
@Component({ 
    selector: 'page-navigation-test', 
    template: `<page-router-outlet></page-router-outlet>` 
}) 
export class PageNavigationApp { 
} 
@NgModule({ 
    declarations: [AppComponent,PageNavigationApp,secondComponent 
     // ...navigatableComponents 
     ], 
    bootstrap: [PageNavigationApp], 
    providers:[AndroidApplication], 
    imports: [NativeScriptModule, 
     NativeScriptRouterModule, 
    NativeScriptRouterModule.forRoot(routes) 
    ], 
}) 
class AppComponentModule { 

    constructor(private androidapplication:AndroidApplication){ 
     this.androidapplication.on("activityBackPressed",()=>{ 
      console.log("back pressed"); 

     }) 
    } 

} 

enableProdMode(); 

platformNativeScriptDynamic().bootstrapModule(AppComponentModule); 

我与

import {AndroidApplication} from "application";

appComponentModule我注册事件activityBackPressed的constrouctor导入应用程序之后,只是做了的console.log。

这不起作用。

我在这里错过了什么?

回答

12

我使用NativeScript与角度,以及这似乎很好地为我工作:

import { RouterExtensions } from "nativescript-angular"; 
    import * as application from "application"; 
    import { AndroidApplication, AndroidActivityBackPressedEventData } from "application"; 
    import { isAndroid } from "platform"; 

    export class HomeComponent implements OnInit { 
     constructor(private router: Router) {} 

     ngOnInit() { 
     if (!isAndroid) { 
      return; 
     } 
     application.android.on(AndroidApplication.activityBackPressedEvent, (data: AndroidActivityBackPressedEventData) => { 
      if (this.router.isActive("/articles", false)) { 
      data.cancel = true; // prevents default back button behavior 
      this.logout(); 
      } 
     }); 
     } 
    } 

请注意,挂在backPressedEvent是一个全球性的东西,所以你需要检查你正在的页面,并按照上面的例子相应地采取行动。

+0

谢谢艾迪,但我怎样才能以编程方式退出应用程序..我想要后退按钮退出应用程序时,在其他主视图上,你在下面的答案中提到,这不是最佳做法。 http://stackoverflow.com/questions/41307447/nativescript-with-angular-2-on-android-how-to-close-my-app – krv

+0

我想如果你的导航栈是'空'后退按钮应该退出应用程序。 –

+0

现在使用这些工具集https://github.com/NathanaelA/nativescript-master-technology – krv

1

通常情况下,您应该有一个android活动并声明该活动的后备功能。仅使用AndroidApplication是不够的。试试这个代码:

import {topmost} from "ui/frame"; 
import {AndroidApplication} from "application"; 

let activity = AndroidApplication.startActivity || 
      AndroidApplication.foregroundActivity || 
      topmost().android.currentActivity || 
      topmost().android.activity; 

activity.onBackPressed = function() { 
    // Your implementation 
} 

您也可以看看这个snippet例如