Unk*_*ist 5 angular-http-interceptors angular
问题:
我有一个拦截器:
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private injector: Injector, private router: Router) {
}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const auth = this.injector.get(AuthenticationService);
const authHeaders = auth.getAuthHeader();
const authReq = request.clone({headers: authHeaders});
return next.handle(authReq).do((event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
}
}, (err: any) => {
if (err instanceof HttpErrorResponse) {
if (err.status === 403) {
this.router.navigate(['login']);
}
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
它在 Angular 5 中很旧,但现在我已经迁移到 6 并且这不再起作用了。
它说 Observable 类型上不存在属性“do”。
我也试图从这个线程实现解决方案:LINK 没有工作。
该主题说这是 rxjs 更改的结果。进行建议的更改后,问题仍然存在(现在用“tap”代替“do”)
这是导入部分:
// import {Observable} from "rxjs/Observable";
import {Observable} from "rxjs/Rx";
import { tap } from 'rxjs/operators';
Run Code Online (Sandbox Code Playgroud)
注意:注释行也已尝试过。
解决方案:
Run Code Online (Sandbox Code Playgroud)import {Observable} from 'rxjs'; import 'rxjs/add/operator/do';
就我而言,无需更改“do”->“tap”;
如果使用角材料,则运行第一个命令后可能需要重新安装。
| 归档时间: |
|
| 查看次数: |
6506 次 |
| 最近记录: |