【问题标题】:How to add interceptors to app.module conditionally?如何有条件地向 app.module 添加拦截器?
【发布时间】:2019-09-17 08:53:04
【问题描述】:

我阅读了其他主题,但没有一个能反映我的问题。 背景优先 - 我们有一个 Angular 应用程序,它可以在两种模式下工作 - 在第一种模式下应用程序使用一个 API,而在第二种模式下 - 另一种。

这个,我想要实现的是只有在第二种模式下才有 Http 拦截器。

那么,有没有办法根据一些 APP_CONFIG 文件或环境属性来有条件地添加 Http 拦截器?

我创建了一种 setInterceptors() 辅助函数,它根据条件将这些拦截器添加到提供程序数组,但在构建过程中失败并显示消息:

装饰器不支持函数调用

【问题讨论】:

  • 为什么你只是不在应用级别注入拦截器,而是在其中检查是否有一些 APP_CONFIG === 某些东西然后执行它?
  • 不确定,如果我理解的话。你能提供一些(伪)代码作为例子吗?
  • 例如您有 HttpInterceptor,将其注入 app.module.ts 中,然后在 HttpInterceptor 中进行拦截,或者在开始检查 (environment.app === "develop") 是否返回的其他函数中;跨度>
  • 你有 2 个独立的模块用于 2 种模式吗?
  • @AdritaSharma 不。这就是问题

标签: javascript angular angular-httpclient-interceptors


【解决方案1】:

您可以为 2 种模式创建 2 个单独的模块,然后将其注入所需的模块提供程序中。

@Injectable({
  providedIn: YourModule
})
export class HttpInterceptorService implements HttpInterceptor {
}

这里YourModule是你要应用拦截器的模块

【讨论】:

  • 嗯,除了 app.module 之外,我无法在任何模块中初始化拦截器。就像它们在延迟加载的模块中完全不可见一样。 :-(
猜你喜欢
  • 2018-01-28
  • 2014-09-11
  • 2011-08-04
  • 1970-01-01
  • 2021-11-27
  • 2021-03-07
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
相关资源
最近更新 更多