【发布时间】:2021-05-31 08:35:35
【问题描述】:
当我们的 Angular 应用程序中的服务执行 HTTP 请求时,我们希望将用户引导到登录页面。
这是我们的设置:
这是我们正在尝试的:
@Injectable({
providedIn: 'root'
})
export class ServiceHelper {
constructor(private router: Router) {}
public handleError<T>(result?: T): (error: any) => Observable<T> {
{
return (error: HttpErrorResponse): Observable<T> => {
if (error.status === 401) {
// Direct the user to login
this.router.navigate(['/login']);
}
console.error(error);
return of(result as T);
};
}
}
}
问题是在 401 上,浏览器被定向到 https://foo.bar/ui/login。我们在 angular.json 中使用“base-href=/ui”运行应用程序。我们的登录应用是一个不同的系统,在 base-href 之外。
有什么好的方法可以告诉 Angular 的路由器将用户重定向到同一服务器上的绝对 URL,在 base-href 之外?
谢谢!
【问题讨论】:
-
我认为
router仅适用于内部路由。要从应用导航到外部路由,我会使用Window对象。 stackoverflow.com/a/1226718/7365461 -
@AliF50 我认为你是对的。通过尝试
this.router.navigateByUrl('/../login');,我可以让浏览器的地址栏显示正确的 URL。但即使这样也行不通,似乎 b/c 这是一条外部路线。window.location.href = '/../login'似乎有效。如果你写一个答案,我会接受它