我正在尝试编写HTTP拦截器,以向请求添加“访问级别”参数。我试图从可观察的currentAccessLevel $获取值。但是,observable未正确返回,并且拦截器中断了整个请求周期。
这个问题在这里和这里已经有了答案,但是,在Angular 8中似乎无法接受这个答案。我不确定我是在做错什么还是在Angular 8中对拦截器进行了某种更改。
我也尝试使用switchMap,flatMap和mergeMap。
import { Injectable } from '@angular/core';
import {
HttpRequest,
HttpHandler,
HttpEvent,
HttpInterceptor
} from '@angular/common/http';
import { Observable } from 'rxjs';
import { switchMap } from 'rxjs/operators';
import { AuthService } from 'src/app/services/auth/auth.service';
@Injectable()
export class AccessLevelInterceptor implements HttpInterceptor {
private accessLevel: string;
constructor(private authService: AuthService) { }
// Intercept HTTP Requests
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// Get current value of access level observable from authentication service
return this.authService.currentAccessLevel$
.mergeMap(res => next.handle(request));
}
}
currentAccessLevel $是在服务中作为BehaviorSubject创建的字符串值,然后将其转换为Observable。这样,字符串的当前值可以在多个组件之间共享。
// Create a BehaviorSubject to track and share updates to currentAccessLevel value
private currentAccessLevel: string;
currentAccessLevelSubject: BehaviorSubject<string> = new BehaviorSubject(this.currentAccessLevel);
currentAccessLevel$ = this.currentAccessLevelSubject.asObservable();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句