我目前在ActivatedRoute的queryParams上遇到了一些问题。我正在尝试实现一个系统,在这个系统中,你可以使用queryParams = "?token=1234“调用任何url。如果提供了此参数,AppComponent将使用此令牌对用户进行身份验证。
这样做的原因是,用户将在不同的应用程序中进行身份验证,该应用程序将接收令牌并将其转发给angular应用程序。
因此,在我的AppComponent中,我有以下代码:
ngOnInit() {
this._route.queryParams.subscribe(queryParams => {
if (queryParams['token'] != null) {
let data;
this._staffService.getStaffFromToken(queryParams['token']).subscribe(
(response: any) => data = response,
(error: Error) => console.error(error),
() => {
if (data.token != null) {
this._staffService.setLoggedInStaff(data.staff);
this.processLogin();
} else {
this._router.navigateByUrl('/login');
}
}
);
} else {
if (this._staffService.getLoggedInStaff() != null) {
this.processLogin();
} else {
this._router.navigateByUrl('/login');
}
}
});
}
我完全理解能够订阅这些params的想法,因为它是一个SPA,并且params在使用应用程序时可能会发生变化。
但是,当我转到下面的url:http://localhost:4200?token=1234时,它会立即导航到/login。由于某些原因,当调用ngOnInit时,它不会立即检测到queryParam。当我向queryParams添加一个debounceTime为500时,它确实可以正常工作,但在我看来不是一个好的解决方案。
有人有什么建议吗?我尝试了不同的方法,但我一直有这个问题。
发布于 2017-04-25 14:36:36
尝试将您的代码放在ngOnChanges()
中并查看ng2 Lifecycle
发布于 2019-04-08 16:52:47
使用observable时,您不能编写同步代码。
尝尝这个。
constructor(private activatedRoute: ActivatedRoute) {}
ngOnInit() {
const token = this.activatedRoute.snapshot.params['token'];
Your code ...
}
https://stackoverflow.com/questions/43613594
复制相似问题