У меня есть страница, которая не должна загружаться, если пользователь не вошел в систему (данные учетной записи). Однако, если пользователь переходит по этому прямому URL-адресу, я бы предпочел направить его на страницу входа. Сейчас делаю вот что:
ionViewWillEnter() {
if (notLoggedIn()){
this.navCtrl.navigateRoot('/tabs/(account:account/login)');
console.info('No user defined when at registration page, redirecting');
}
}
Я получаю консоль для входа, но страница не переходит на нужную страницу (URL-адрес изменяется, но отображается старая страница).
Некоторые из событий жизненного цикла Ionic не запускаются в Ionic 4, я думаю, из-за переключения на угловую маршрутизацию вместо ионной маршрутизации. В частности, в документации 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 вместе