2015-09-26 7 views
10

के लिए वापस जा किसी भी ion-item यह वांछित पेज खोलने पर क्लिक करते हैं की एप्लिकेशन बंद कर देता है, लेकिन अगर मैं डिवाइस वापस बटन पर क्लिक करें यह बल्कि एंड्रॉयड में पिछले पृष्ठ पर वापस जाने से ऐप्स को बंद:डिवाइस पर क्लिक करने से वापस बटन के बजाय पिछले पृष्ठ

<ion-side-menus enable-menu-with-back-views="false"> 
    <ion-side-menu-content> 
    <ion-nav-bar class="bar-positive"> 
     <ion-nav-back-button></ion-nav-back-button> 
     <ion-nav-buttons side="left"> 
     <button class="button button-icon icon ion-android-menu" menu-toggle="left"> 
     </button> 
     </ion-nav-buttons> 
    </ion-nav-bar> 
    <ion-nav-view name="menuContent"></ion-nav-view> 
    </ion-side-menu-content> 

    <ion-side-menu side="left"> 
    <ion-header-bar class="bar-positive"> 
     <h1 class="title"></h1> 
    </ion-header-bar> 
    <ion-content> 
     <ion-list> 
     <ion-item menu-close ng-click="login()"> 
      Login 
     </ion-item> 
     <ion-item menu-close ui-sref="app.search"> 
      Search 
     </ion-item> 
     <ion-item menu-close href="#/app/browse"> 
      Browse 
     </ion-item> 
     <ion-item menu-close href="#/app/playlists"> 
      Playlists 
     </ion-item> 
     </ion-list> 
    </ion-content> 
    </ion-side-menu> 
</ion-side-menus> 

यहाँ app.js है:

यह मेरा आयनिक पक्ष मेनू है

.state('app', { 
    url: '/app', 
    abstract: true, 
    templateUrl: 'templates/menu.html', 
    controller: 'AppCtrl' 
    }) 

    .state('app.search', { 
    url: '/search', 
    views: { 
     'menuContent': { 
     templateUrl: 'templates/search/default.html' 
     } 
    } 
    }) 
    .state('app.search-form', { 
    url: '/search-form', 
    views: { 
     'menuContent': { 
     templateUrl: 'templates/search/search-form.html' 
     } 
    } 
    }) 

हे ne समाधान मैंने पाया:

$ionicHistory.nextViewOptions({   
    disableBack: true, 
    historyRoot: true 
});  

तो जब आप एक बटन और अगले पृष्ठ पर जाकर क्लिक करें, इस वसीयत बटन वापस अक्षम हो जाएगा।

उत्तर

22

बैक बटन का डिफ़ॉल्ट व्यवहार इस प्रकार है: इतिहास में वापस जाएं - यदि इतिहास स्टैक खाली है -> ऐप से बाहर निकलें।

तो जब आप हार्डवेयर बैक बटन टैप करते हैं तो आपको उस $ राज्य की जांच करनी चाहिए जिसमें आप हैं।

निम्न कोड (आपके मॉड्यूल के रन फ़ंक्शन में रखा गया) के साथ आप डिफ़ॉल्ट व्यवहार को ओवरराइट कर सकते हैं।

$ionicPlatform.registerBackButtonAction(function (event) { 
    if($state.current.name=="app.home"){ 
    navigator.app.exitApp(); //<-- remove this line to disable the exit 
    } 
    else { 
    navigator.app.backHistory(); 
    } 
}, 100); 

$ionicPlatform के लिए दस्तावेज़ देखें: उदाहरण के लिए आप इस तरह एप्लिकेशन से बाहर निकलें निष्क्रिय कर सकते हैं।

+0

कैसे मैं एक बार '$ state.current.name ==" app.home "पृष्ठों वापस करने के लिए नेविगेट कर सकते हैं' सही है? – manish

+0

$ IonicHistory पर एक नज़र डालें। http://ionicframework.com/docs/api/service/$ionicHistory/। और अगर यह आपके मूल प्रश्न को हल करता है तो कृपया इस उत्तर को स्वीकार करें। –

+0

@AndreKreienbring आपने 100 मिलीसेकंड देरी क्यों जोड़ दी? –

6

यह menu-close साइड मेनू में विशेषता है जो इतिहास को साफ़ करता है। आप menu-toggle="left" के साथ इसे बदलकर प्रयोग कर सकते हैं। वह अभी भी साइड बार बंद कर देगा लेकिन इतिहास को बनाए रखेगा।

मैंने नीचे की तरह एचडब्ल्यू बैक कुंजी के व्यवहार को ओवरराइड करना समाप्त कर दिया। यह वापस दबाते समय ऐप से बाहर निकलने से पहले उपयोगकर्ता को प्रारंभिक दृश्य में भेजता है। ध्यान दें कि मैं अभी भी साइड मेनू में menu-close विशेषता का उपयोग करता हूं। यह भी ध्यान दें कि मैं window.localStorage["start_view"] में प्रारंभ यूआरएल स्टोर करना चाहता हूं क्योंकि यह मेरे ऐप में बदल सकता है। उम्मीद है कि यह इस समस्या के साथ किसी और को प्रेरित/प्रेरित कर सकता है।

$ionicPlatform.registerBackButtonAction(function(event) { 
    if ($ionicHistory.backView() == null && $ionicHistory.currentView().url != window.localStorage["start_view"]) { 
     // Goto start view 
     console.log("-> Going to start view instead of exiting"); 
     $ionicHistory.currentView($ionicHistory.backView()); // to clean history. 
     $rootScope.$apply(function() { 
     $location.path(window.localStorage["start_view"]); 
     }); 
    } else if ($ionicHistory.backView() == null && $ionicHistory.currentView().url == window.localStorage["start_view"]) { 
     console.log("-> Exiting app"); 
     navigator.app.exitApp(); 
    } else { 
     // Normal back 
     console.log("-> Going back"); 
     $ionicHistory.goBack(); 
    } 
    }, 100); 
+0

आपके समाधान के लिए Thanx, जिसने हमें इस आयनिक कैश और नेविगेशन इतिहास छोटी गाड़ी से बाहर निकलने में मदद की। – mably

+0

मेनू-टॉगल के साथ मेनू-बंद करने में मदद की! धन्यवाद! –

0

एक समाधान हो सकता है:

$ionicHistory.nextViewOptions({   
    disableBack: true, 
    historyRoot: true 
});  
0

यह फैलने से घटना को रोकता है अन्यथा यह काम नहीं किया।

कोड द्वारा: https://stackoverflow.com/users/5378702/andre-kreienbring

$ionicPlatform.registerBackButtonAction(function (event) { 
    if(condition){ 
    navigator.app.exitApp(); //<-- remove this line to disable the exit 
    } 
    else { 
    navigator.app.backHistory(); 
    } 
    throw "PreventBackButton"; 
}, 100); 
संबंधित मुद्दे