Я работаю над приложением с реактивными формами, где пользователь заполняет данные и переходит к следующему шагу, нажимая кнопку Далее.
У меня есть следующая проблема, которую нужно решить в моем приложении: пользователь не может перемещаться по сайт, вручную изменив URL. Если он / она пытается, ожидаемый результат должен быть:
Всплывающее окно с информацией о том, что все данные будут потеряны, и пользователь будет возвращен на первую страницу.
После того, как пользователь изменит URL-адрес и примет потерю данных, нажав «Да», пользователь должен начать с первой страницы.
- Единственный раз, когда пользователь должен оставаться на той же странице должно быть после обновления страницы.
Сначала я попытался сделать это с помощью охранников, но потом я не смог найти способ Angular сказать, что защита должна работать, только если пользователь изменяет URL-адрес вручную. Охранник также работал во время навигации с помощью кнопки Next - другими словами, кнопка Next больше не позволяла мне go перейти к следующему шагу.
Затем я реализовал что-то вроде этого:
export class DirectAccessGuard implements CanActivate {
constructor(private router: Router ) {
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
if (this.router.url === '/') {
this.router.navigate(['']);
return false;
}
return true;
}
}
и добавил эту защиту для каждого из моих путей, и она работала довольно хорошо, пока я не понял, что это решение также не идеально, потому что оно перенаправляет меня на первую страницу после обновления страницы. Также попробовал CanDeactivate, но я думаю, это не то, что мне нужно здесь. Есть идеи?