ionic2實(shí)戰(zhàn)-完美處理安卓硬件返回按鈕

效果演示

源代碼已上傳到github

由于ionic版本更新較快,有些寫(xiě)法可能改變來(lái)不及更新簡(jiǎn)書(shū),請(qǐng)以github代碼為準(zhǔn)

ionic2-完美處理安卓硬件返回按鈕.gif

介紹

  • 注冊(cè)安卓硬件返回按鈕事件是必須的,因?yàn)橛脩舨恍⌒狞c(diǎn)擊了返回按鈕就退出app體驗(yàn)很不好. 所以當(dāng)用戶點(diǎn)擊返回按鈕,應(yīng)該提示"再按一次退出"

  • 不想實(shí)現(xiàn)"再按一次退出",想實(shí)現(xiàn)像QQ一樣按返回最小化app?可以看這里

  • ionic2更新比較快,Google找到的許多處理方法都是舊版本,下面就貼出package.json完整代碼,截至目前是最新的
    {
    "name": "ionic-app-base",
    "author": "Ionic Framework",
    "homepage": "http://ionicframework.com/",
    "private": true,
    "scripts": {
    "clean": "ionic-app-scripts clean",
    "build": "ionic-app-scripts build",
    "ionic:build": "ionic-app-scripts build",
    "ionic:serve": "ionic-app-scripts serve"
    },
    "dependencies": {
    "@angular/common": "2.2.1",
    "@angular/compiler": "2.2.1",
    "@angular/compiler-cli": "2.2.1",
    "@angular/core": "2.2.1",
    "@angular/forms": "2.2.1",
    "@angular/http": "2.2.1",
    "@angular/platform-browser": "2.2.1",
    "@angular/platform-browser-dynamic": "2.2.1",
    "@angular/platform-server": "2.2.1",
    "@ionic/storage": "1.1.7",
    "ionic-angular": "2.0.0-rc.4",
    "ionic-native": "2.2.11",
    "ionicons": "3.0.0",
    "rxjs": "5.0.0-beta.12",
    "zone.js": "0.6.26"
    },
    "devDependencies": {
    "@ionic/app-scripts": "0.0.47",
    "typescript": "2.0.9"
    }
    }

  • 今天(2017年3月17日 10:12:31)升級(jí)到最新版本,代碼不變,依然可以用,特此說(shuō)明


核心代碼

核心代碼就4個(gè)文件,這4個(gè)文件中的完整代碼如下

  1. app.html,添加#myNav,在app.component.ts文件通過(guò)@ViewChild('myNav')獲取
    <ion-nav #myNav [root]="rootPage"></ion-nav>
  • app.component.ts

     import {Component, ViewChild} from '@angular/core';
     import {Platform, ToastController, Nav, IonicApp} from 'ionic-angular';
     import {StatusBar, Splashscreen} from 'ionic-native';
     import {TabsPage} from '../pages/tabs/tabs';
    
     @Component({
       templateUrl: 'app.html'
     })
     export class MyApp {
       rootPage = TabsPage;
       backButtonPressed: boolean = false;  //用于判斷返回鍵是否觸發(fā)
       @ViewChild('myNav') nav: Nav;
    
       constructor(public ionicApp: IonicApp, public platform: Platform, public toastCtrl: ToastController) {
         platform.ready().then(() => {
           StatusBar.styleDefault();
           Splashscreen.hide();
           this.registerBackButtonAction();//注冊(cè)返回按鍵事件
         });
       }
    
       registerBackButtonAction() {
         this.platform.registerBackButtonAction(() => {
           //如果想點(diǎn)擊返回按鈕隱藏toast或loading或Overlay就把下面加上
           // this.ionicApp._toastPortal.getActive() || this.ionicApp._loadingPortal.getActive() || this.ionicApp._overlayPortal.getActive()
           let activePortal = this.ionicApp._modalPortal.getActive();
           if (activePortal) {
             activePortal.dismiss().catch(() => {});
             activePortal.onDidDismiss(() => {});
             return;
           }
           let activeVC = this.nav.getActive();
           let tabs = activeVC.instance.tabs;
           let activeNav = tabs.getSelected();
           return activeNav.canGoBack() ? activeNav.pop() : this.showExit()
         }, 1);
       }
    
       //雙擊退出提示框
       showExit() {
         if (this.backButtonPressed) { //當(dāng)觸發(fā)標(biāo)志為true時(shí),即2秒內(nèi)雙擊返回按鍵則退出APP
           this.platform.exitApp();
         } else {
           this.toastCtrl.create({
             message: '再按一次退出應(yīng)用',
             duration: 2000,
             position: 'top'
           }).present();
           this.backButtonPressed = true;
           setTimeout(() => this.backButtonPressed = false, 2000);//2秒內(nèi)沒(méi)有再次點(diǎn)擊返回則將觸發(fā)標(biāo)志標(biāo)記為false
         }
       }
    

    }

  • tabs.html,添加#mainTabs,在tabs.ts文件通過(guò)@ViewChild('mainTabs') tabs:Tabs;獲取
    <ion-tabs #mainTabs>
    <ion-tab [root]="tab1Root" tabTitle="Home" tabIcon="home"></ion-tab>
    <ion-tab [root]="tab2Root" tabTitle="About" tabIcon="information-circle"></ion-tab>
    <ion-tab [root]="tab3Root" tabTitle="Contact" tabIcon="contacts"></ion-tab>
    </ion-tabs>

  • tabs.ts
    import {Component, ViewChild} from '@angular/core';
    import { HomePage } from '../home/home';
    import { AboutPage } from '../about/about';
    import { ContactPage } from '../contact/contact';
    import {Tabs} from "ionic-angular";

     @Component({
       templateUrl: 'tabs.html'
     })
     export class TabsPage {
       @ViewChild('mainTabs') tabs:Tabs;
       tab1Root: any = HomePage;
       tab2Root: any = AboutPage;
       tab3Root: any = ContactPage;
     
       constructor() {
       }
     }
    

今天(2017年3月21日 22:34:42)添加隱藏鍵盤(pán)事件


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 本示例是ionic3.3,用了懶加載 在app.html中,添加#myNav,在app.component.ts文...
    YuRi_1閱讀 2,792評(píng)論 1 6
  • 完成Ionic安裝后,你可以創(chuàng)建第一個(gè)App了。本章內(nèi)容將指導(dǎo)你新建一個(gè)App,添加一個(gè)頁(yè)面,并且實(shí)現(xiàn)頁(yè)面間的導(dǎo)航...
    全棧弄潮兒閱讀 475評(píng)論 0 2
  • 如今算來(lái),從開(kāi)始工作到現(xiàn)在已經(jīng)有4年了,如果算上兼職,工作的年限可以延伸到8年之久。摩羯座這個(gè)星座還是比較熱愛(ài)工作...
    Commonsense閱讀 976評(píng)論 0 1
  • 1.IP電商。微博是圖文短視頻消費(fèi)平臺(tái),京東天貓是貨消費(fèi)平臺(tái),而事實(shí)是這兩種平臺(tái)的界限正在急劇模糊,淘寶這兩三年很...
    海貍叔叔閱讀 250評(píng)論 0 1
  • 如果現(xiàn)在你告訴我默默喜歡了一個(gè)人好久,我會(huì)贊嘆你牛逼呀,然后罵你個(gè)sb,去追呀!這大好的青春是要用經(jīng)歷來(lái)填滿的,而...
    ZXRLEMON閱讀 505評(píng)論 5 6