从canActivate返回一个observable <boolean>

时间:2019-06-04 23:10:40

标签: angular typescript observable

我正在尝试找出如何从我的后卫中的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

然后错误不断出现。

0 个答案:

没有答案