我的要求是,如果用户从地址栏中手动更改浏览器URL,则阻止用户导航。只能通过有角度的app(router.navigate())进行路由。
我知道我们可以使用canActive属性实现路由保护。
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
}
但是我不知道我可以使用ActivatedRouteSnapshot或RouterStateSnapshot的哪些属性来标识用户正在使用手动URL更改在应用程序内部进行导航。你能帮忙吗?
答案 0 :(得分:0)
我认为使用ActivatedRouteSnapshot或任何其他类是不可能的。
我想对您的应用程序添加一个奇怪的行为,因为这也意味着您不希望用户能够刷新页面。如果您担心通过手动导航到组件而没有足够的数据来使其正常运行,则可以使用前面提到的防护措施。
希望有帮助
答案 1 :(得分:0)
我最近遇到了这个问题,我想我已经解决了它,或者至少对我有用。
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
const nav = this.router.getCurrentNavigation();
if (nav.id === 1 || nav.previousNavigation !== null) {
this.router.navigate(['/somewhere']);
} else {
return true;
}
}
导航对象的属性“ id”指示应用程序中用户浏览历史记录中的编号。因此 id === 1 表示用户是通过浏览器地址首次输入的,而不是通过 router.navigate()
重定向输入的如果用户已经在浏览该应用程序,则我们必须检查是否存在先前注册的导航,并能够从他们的浏览位置进行控制。