我正在使用 Angular 17 并实现了,现在我需要向翻译模块发送的每个请求添加一个 HttpContext 对象,以便我的拦截器可以确定它不必考虑此请求。
我的拦截器看起来像这样:
export const authInterceptor: HttpInterceptorFn = (req, next) => {
const authSvc = inject(AuthService);
const router = inject(Router);
if (req.context.get(IS_PUBLIC_API)) {
return next(req);
}
...
我想将密钥“IS_PUBLIC_API”附加到翻译模块发送的每个请求,就像我对某些http请求所做的那样:
private readonly CONTEXT = {context: new HttpContext().set(IS_PUBLIC_API, true)};
login(body: Login): Observable<LoginResponse> {
return this.http.post<LoginResponse>(`${environment.apiUrl}/login`, body, this.CONTEXT);
}
翻译模块的配置是这样的:
TranslateModule.forRoot({
defaultLanguage: 'fr',
loader: {
provide: TranslateLoader,
useFactory: (http: HttpClient) => new TranslateHttpLoader(http),
deps: [HttpClient]
},
})
您可以制作自定义翻译加载器来添加上下文
export class MyTranslateLoader implements TranslateLoader {
private readonly CONTEXT = {context: new HttpContext().set(IS_PUBLIC_API, true)};
constructor(private http: HttpClient, public prefix: string = "/assets/i18n/", public suffix: string = ".json") {}
public getTranslation(lang: string): Observable<Object> {
return this.http.get(`${this.prefix}${lang}${this.suffix}`, this.CONTEXT);
}
}
TranslateModule.forRoot({
defaultLanguage: 'fr',
loader: {
provide: TranslateLoader,
useFactory: (http: HttpClient) => new MyTranslateLoader(http),
deps: [HttpClient]
},
})