如何将http上下文附加到角度翻译模块发送的请求

问题描述 投票:0回答:1

我正在使用 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]
        },
      })
angular typescript
1个回答
0
投票

您可以制作自定义翻译加载器来添加上下文

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]
        },
      })
© www.soinside.com 2019 - 2024. All rights reserved.