我有一个页面,除非用户已登录(帐户详细信息),否则该页面不会加载。但是,如果用户转到该直接URL,我希望将其定向到登录页面。目前,我正在这样做:
ionViewWillEnter() {
if (notLoggedIn()){
this.navCtrl.navigateRoot('/tabs/(account:account/login)');
console.log('No user defined when at registration page, redirecting');
}
}
我让控制台登录,但是页面无法导航到正确的页面(URL更改了,但是显示了旧页面)。
答案 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