我正在尝试找出如何从我的后卫中的canActivate方法返回一个可观察到的对象,但我似乎无法弄清楚。
我已经阅读了很多有关此的答案,尤其是这个Angular2 - return boolean with subscribe to canActivate。我非常仔细地遵循了这个答案,但仍然无法正常工作。
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
return this._adminService.maintenanceOptions('maint-options').map(data => {
if (data['maintSwitch'] == 'off') {
const navigationExtras: NavigationExtras = {
queryParams: { errorMessage: data['maintComment'] }
};
this.router.navigate(['/maintenance'], navigationExtras);
return false;
}
return true;
});
}
maintenanceOptions(apiPath: string) {
this.toggleLoading(true);
const url = this._baseUrl + apiPath;
const options = this._authService.getOptions();
return this.http.get(url, options)
.take(1)
.map((res: Response) => res.json())
.finally(() => this.toggleLoading(false));
}
我希望它能够接受可观察到的东西,但是我在这里出现了错误。我在chrome控制台中不断收到此错误:
ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'length' of null
TypeError: Cannot read property 'length' of null at
HttpHeaders.push../node_modules/@angular/common/fesm5/http.js.HttpHeaders.applyUpdate
然后错误不断出现。