首页 文章

Ionic 2:从导航堆栈中删除登录页面,导致nav.push停止在Dashboard页面中工作

提问于
浏览
-1

我有这个奇怪的问题 . 用户登录时,用户将转发到仪表板 . 但在此之前,我从导航堆栈中删除了登录页面,以便当用户按下硬件后退按钮时,它们不会被带回登录页面(因为它们已经登录) .

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

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();
     });

}

此代码运行良好,但遇到了一个奇怪的问题

PROBLEM

仪表板或滑动菜单中的任何按钮都不起作用 . 每个链接/按钮调用一些导航到其他页面的方法 . 示例方法 -

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

我可以看到正在调用这些方法,因为我可以看到在控制台中打印日志 . 唯一的事情是 this.navCtrl.push(ProductsPage); 似乎无法正常工作 .

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

1 回答

  • 0

    没有理由通过尝试获取LoginPage索引并将其删除来操纵导航堆栈 . 我建议只需将 DashboardPage 设置为导航堆栈的根目录 .

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

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

相关问题