Ionic 4在生命周期事件中导航,防止重新加载时显示页面

时间:2018-10-30 04:11:41

标签: angular ionic-framework angular-router ionic4

我有一个页面,除非用户已登录(帐户详细信息),否则该页面不会加载。但是,如果用户转到该直接URL,我希望将其定向到登录页面。目前,我正在这样做:

ionViewWillEnter() { 
  if (notLoggedIn()){
    this.navCtrl.navigateRoot('/tabs/(account:account/login)');
    console.log('No user defined when at registration page, redirecting');
    }
  }

我让控制台登录,但是页面无法导航到正确的页面(URL更改了,但是显示了旧页面)。

1 个答案:

答案 0 :(得分:0)

我认为某些离子生命周期事件未在Ionic 4中触发,原因是切换到了Angular路由而不是Ionic路由。特别是在NavController文档中,它显示ionViewCanEnter使用navCtrl.push方法,而不是navCtrl.navigateRoot或前进/后退(这是我在上面键入的内容之前首先尝试的方法)的新方法。

因此,要解决此问题,我使用了常规的Angular路由生命周期防护,但坚持使用Ionic NavController进行导航。我创建了一个新的生命周期防护,如下所示:

  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): boolean {

    if (this.userService.isLoggedIn()) { return true; }
    this.navCtrl.navigateRoot('/tabs/(account:account/login)');
    return false;

  }

效果很好。

任何人一起学习Ionic和Angular的好文档here