2017-07-07 56 views
-1

我有这个奇怪的问题。用户登录时,用户被转发到仪表板。但在此之前,我从导航堆栈中删除登录页面,以便当用户按下硬件返回按钮时,它们不会被带回登录页面(因为它们已经登录)。Ionic 2:从导航堆栈中删除登录页面,导致nav.push在仪表板页面停止工作

以下是登录页面的我的登录方法

loginUser(){ 
    this.loading=this.loadingctrl.create({ 
      content:"Logging in, please wait..." 
    }); 

    this.loading.present(); 

    this.ajaxRequest = this.webservice.loginUser(params).subscribe(data => { 
     this.loading.dismiss(); 
     if(data.status =="ok"){ 
      this.navctrl.push(DashboardPage).then(()=>{ 
       const index = this.viewCtrl.index; 
       this.navctrl.remove(index); 
       //Above two lines finds index of current page and removes current page, i.e. login page from navigation stack 
      }); 
     }else{ 
      //show error alert 
     } 
    }, err =>{ 
     this.loading.dismiss(); 
    }); 

} 

此代码工作得很好,但是却遇到了一个奇怪的问题

问题

在仪表板的任何按钮或刷卡菜单没有按没有工作。每个链接/按钮调用一些导航到其他页面的方法。示例方法 -

gotoProductsPage(){ 
console.log("method gotoProductsPage is called"); 
this.navCtrl.push(ProductsPage); 
} 

我可以看到方法被调用,因为我可以看到日志被打印在控制台中。唯一的是this.navCtrl.push(ProductsPage);似乎不工作。

我在登录页面的登录方法中做了进一步的测试并注释了行const index = this.viewCtrl.index;this.navctrl.remove(index);。 现在,所有的按钮的作品。但硬件后退按钮将用户带回登录页面。 任何人都可以启发我为什么我的应用程序有这种奇怪的行为? 谢谢

+3

为什么不''this.navCtrl.setRoot(DashboardPage)'? – Duannx

回答

0

没有理由通过尝试获取LoginPage索引并将其删除来操纵导航堆栈。 我建议简单地将DashboardPage设置为导航堆栈的根。

if(data.status =="ok"){ 
      this.navctrl.setRoot(DashboardPage).then(()=>{ 
       console.log("done"); 
      }); 
}else{ 
      //show error alert 
} 

现在它不会导航到登录页面back

+0

我愚蠢的错误,我怎么能忽略这个。谢谢! – WatsMyName