Ahm*_*ssy 5 javascript cyclic-dependency angular-http-interceptors angular angular6
我已经在不同的Angular版本中多次发现此问题,但是有多个消息来源说它已经得到解决,例如,关于Stackoverflow的另一个类似问题是有这个答案,它说它已在Angular 5.2中解决,在Github上还有其他问题在说在6.0.2中解决,我正在使用Angular 6.0.3,但是每当我尝试在HttpInterceptor类中注入使用HttpClient的服务时(仍然会收到一个问题)(如果在该请求中接收到jwt,则应该在请求中添加jwt令牌)服务)
我没有收到具有周期性依赖关系的警告或错误,请在浏览器控制台中看到数千个Interceptor正在调用服务的请求,反之亦然。
解决此问题的正确方法是什么?(最好不将jwt存储在本地存储中)
(即使用拦截器并从服务中获取jwt)
我的服务:
....
// only showing parts that matter, HttpClient is injected here
// to be used in calling the API services
constructor(public http: HttpClient, private route: ActivatedRoute,
public translate: TranslateService, private router: Router,
public snackBar: MatSnackBar, private notification: NotificationService) {
//
Run Code Online (Sandbox Code Playgroud)
我的HttpInterceptor:
import { Observable } from 'rxjs';
import { Location } from '@angular/common';
import { Injectable, Injector } from '@angular/core';
import { HttpInterceptor } from '@angular/common/http';
import { HttpRequest } from '@angular/common/http';
import { HttpHandler } from '@angular/common/http';
import { HttpEvent } from '@angular/common/http';
import { HttpHeaders } from '@angular/common/http';
import { DataService } from './data/data.service';
@Injectable()
export class CustomHttpInterceptor implements HttpInterceptor {
constructor(private injector: Injector) {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const dataService = this.injector.get(DataService);
console.log('hey there, we are here INTERCEPTOR');
if (dataService.jwt) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${dataService.jwt}`
}
});
}
return next.handle(request);
}
}
Run Code Online (Sandbox Code Playgroud)
ng版本
Angular CLI: 6.0.8
Node: 10.0.0
OS: win32 x64
Angular: 6.0.7
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router
Package Version
-----------------------------------------------------------
@angular-devkit/architect 0.6.3
@angular-devkit/build-angular 0.6.3
@angular-devkit/build-optimizer 0.6.3
@angular-devkit/core 0.6.3
@angular-devkit/schematics 0.6.8
@angular/cdk 6.1.0
@angular/cli 6.0.8
@angular/flex-layout 6.0.0-beta.15
@angular/material 6.3.1
@ngtools/webpack 6.0.3
@schematics/angular 0.6.8
@schematics/update 0.6.8
rxjs 6.2.1
typescript 2.7.2
webpack 4.8.3
Run Code Online (Sandbox Code Playgroud)
我可以通过在服务中自己实例化 HttpClient 来解决这个问题:
@Injectable()
export class DataService {
private http: HttpClient;
constructor(httpBackend: HttpBackend) {
this.http = new HttpClient(httpBackend);
}
}
Run Code Online (Sandbox Code Playgroud)
这打破了我的案例中的无限循环问题(使用 Angular@6.1.10)。
| 归档时间: |
|
| 查看次数: |
477 次 |
| 最近记录: |