2016-09-27 78 views
0

我正在嘗試構建一個應用程序,它具有以下工作流程。Ionic2 navController屬性不按預期工作

  1. LoginPage
  2. 首頁
  3. 創建請求頁面 - >在主頁和菜單現
  4. 請求成功頁面 - >時,要求創作是成功
  5. 請求列表頁面 - >目前在主頁和菜單
  6. 請求詳細頁面 - >點擊請求項目

從登錄頁面當用戶已經給出正確的憑據,我打電話給service.If成功,我讓主頁作爲導航控制器的根。

if(getLoginDetails.status == "success") 
{ 
this.navCtrl.setRoot(HomePage); 
} 

,但仍當我在首頁構造函數中使用this.navCtrl.length(),其顯示2.How能這樣呢,當我剛換過從LoginPage與按我的理解homepage.As導航堆棧的根元素,計數應是1. 除登錄每頁有swipeEnabled = true菜單和後退按鈕。 現在假設用戶轉到HomePage,然後createRequestPage,然後使用菜單去requestListPage,現在我需要當用戶點擊返回按鈕時,它應該把用戶帶到homePage.For我的方法是,當用戶點擊菜單,我將刪除導航堆棧中的所有頁面除了第一個是我們的根網頁之外。 我試着用這種方式,但它不是working-

this.navCtrl.remove(1,this.navCtrl.length(),{}).then(
()=>{ 
     this.navCtrl.push(RequestListPage) 
}); 

但這似乎並不工作。 有人可以幫我解決這個問題。 另外一些更好的離子2 NavController文檔。

回答

0

您是否在@Component中設置了selector標籤?這是Ionic中的一個小錯誤,它會導致頁面自動進入堆棧,這可以解釋爲什麼長度是2以及爲什麼有後退按鈕。

如果是這種情況,刪除selector應該做的伎倆。


爲什麼不只是切換布爾值如果人通過菜單或不?然後只要推到主頁,如果布爾值爲真。代碼中更簡單,可能更乾淨。

+0

。 – RHUL

0

,如果你把navCtrl中就是那樣提供者:

在供應商進口

import { NavController, App } from 'ionic-angular'; 

出口類的init

private navCtrl: NavController; 

在構造

constructor(private app:App) { 

    this.navCtrl = app.getActiveNav(); 

} 

定義一個功能轉到主頁:

goToHomePage() { 

    this.navCtrl.setRoot(HomePage); 

} 

現在可以調用此。navCtrl在任何頁面你喜歡

import { YourProvider } from "../../your-provider"; 


@Component({ 

    selector: 'page', 

    templateUrl: 'page.html', 

    providers: [YourProvider] 

}) 


export class YourPage{ 

    constructor(private yourProvider : YourProvider) { 

} 

goToHome() { 
    this.yourProvider.goToHomePage(); 
} 

現在你可以使用我不是有我的應用程序選擇navCtrl

古德勒克