자동 사용로드 표시기를 사용하기 위해 HttpInterceptor에서 싱글 톤 서비스를 사용하려고합니다.각도 HttpInterceptor에서 서비스 사용
그러나 문제는 인터셉터가 서비스없이 작동하지만 서비스를 사용하지 않는 것입니다. 서비스와 HttpInterceptor는 다음과 같이 제공되는 응용 프로그램 모듈에서
constructor(private htbs: HttpBusyService) {}
:
providers: [
HttpBusyService,
{ provide: LocationStrategy, useClass: HashLocationStrategy},
{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
MessageService,
ConfirmationService,
]
내가하고있는 동안 오류가 HttpInterceptor의 생성자에서 다음과 같이
나는 서비스를 참조하고 점점 :
Uncaught Error: Can't resolve all parameters for AuthInterceptor: (?).
at syntaxError (compiler.js:485)
at CompileMetadataResolver._getDependenciesMetadata (compiler.js:15664)
at CompileMetadataResolver._getTypeMetadata (compiler.js:15499)
at CompileMetadataResolver._getInjectableMetadata (compiler.js:15479)
at CompileMetadataResolver.getProviderMetadata (compiler.js:15839)
at eval (compiler.js:15750)
at Array.forEach (<anonymous>)
at CompileMetadataResolver._getProvidersMetadata (compiler.js:15710)
at CompileMetadataResolver.getNgModuleMetadata (compiler.js:15278)
at JitCompiler._loadModules (compiler.js:34226)
나는 어디에서 볼 것인지 모른다. 내가 틀린 일을하고있는 것은 명백합니다. 왜냐하면 싱글 톤을 사용하는 다른 인터셉터를 보았 기 때문입니다. 나는 각 5.1.0-rc.1를 사용하고 있지만, 5.0.0은 어떤 도움이 많이
월 내가 Angular HTTP Interceptor that uses a Service을 보았다
PS1
을 감사같은 문제
했다? 인터셉터import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpResponse, HttpHandler, HttpEvent, HttpEventType, HttpErrorResponse } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { HttpBusyService } from './http-busy.service';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/catch';
import 'rxjs/Observable';
import 'rxjs/add/observable/throw';
export class AuthInterceptor implements HttpInterceptor {
constructor(private htbs: HttpBusyService) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<HttpEventType.Response>> {
// this.htbs.start();
const authReq = req.clone({
setHeaders: { 'X-AUTH-TOKEN': sessionStorage.getItem('token') }
});
return next
.handle(authReq)
.do((ev: HttpEvent<any>) => {
if (ev instanceof HttpResponse) {
console.log('processing response', ev);
}
})
.catch(response => {
// if (response instanceof HttpErrorResponse) {
console.log('Processing http error', response);
// }
return Observable.throw(response);
});
}
}
과 바쁜 서비스 :
import { Injectable } from '@angular/core';
@Injectable()
export class HttpBusyService {
public busy = false;
private count = 0;
constructor() { }
public start() {
this.count++;
this.busy = true;
}
public finish() {
this.count--;
if (this.count <= 0) {
this.count = 0;
this.busy = false;
}
}
}
웅변 작다. – DmitriyKhirniy
AuthInterceptor 클래스에서 @Injectable() 정의를 잊어 버렸습니다 !! ;-) – JTejedor
JTejedor의 솔루션이 실제로 해결책이었습니다. 지금은 잘 작동합니다. 왜 그런지 이해가 안됩니다. –