【问题标题】:Angular 2 APP_INITIALIZERAngular 2 APP_INITIALIZER
【发布时间】:2018-04-10 15:53:31
【问题描述】:

我最后一天一直在搜索谷歌,我对 Angular 2 中的 APP_INITIALIZER 有一个基本问题。官方网站上的文档没有明确这一点。

APP_INITIALIZER 只能用于 RootModule 或任何其他自定义模块?

我有几个延迟加载模块,每个模块都有自己的配置。我想在加载模块之前加载延迟加载模块的配置。 更具体地说,我正在使用公开服务(服务 A)的第 3 方库。此服务已将 ConfigA 注入其构造函数。我使用 http 从我的服务器获取配置,我想将其映射为 ConfigA,它将被注入到 ServiceA 中。

【问题讨论】:

  • 我想在延迟加载模块加载之前加载该模块的配置。 - 如何使用?
  • 你能在问题中加入一些伪代码吗?
  • @Maximus 第 3 方库是 github.com/stomp-js/ng2-stompjs 检查它接受 StompConfig 对象的 StompService。正如我所解释的,我有几个延迟加载模块。每个模块都有自己的 StompService,因此也有自己的 StompConfig。为了让一个模块启动一个 StompService 必须被初始化。 LazyModule1 有一个 componentA ComponentA 在其构造函数中注入了 StompService
  • 您是否将StompConfigStompService 都定义为惰性模块上的提供者?
  • 你找到解决办法了吗?

标签: angular angular2-services


【解决方案1】:

APP_INITIALIZER 只能用于 RootModule 或任何其他自定义 模块也是?

由于APP_INITIALIZER 只是一个提供者,您可以在任何非延迟加载的模块上注册它。

阅读更多here

【讨论】:

  • 延迟加载模块怎么样。有没有办法有类似的行为?例如,在加载其他任何内容之前加载模块的配置
  • 延迟加载的模块在应用程序已经初始化时加载
  • 解析器可以在这里提供帮助blog.thoughtram.io/angular/2016/10/10/…
  • @yurzui Resolver 只能用于路由数据? /** * whatItDoes 表示与特定路由关联的已解析数据。 * 请参阅 {@link Routes} 了解更多详情。 * stable */ export declare type ResolveData = { [name: string]: any; };
  • @pantonis,你想做什么?为什么需要APP_INITIALIZER
【解决方案2】:

正如@yurzui 提到的: 在惰性模块中,使用解析器创建路由路径定义。 在这个解析器类中实现解析函数。 resolve 函数可以返回 Promise 对象,这有助于您实现初始化逻辑。

@Injectable()
export class LocalizationResolve implements Resolve<any> {

  constructor(
    public localizationConfig: LocalizationConfig) {
  }

  resolve(route: ActivatedRouteSnapshot) {
    return this.localizationConfig.load();
  }
}

路线定义:

 path: '', component: SecureComponent, resolve: { locale: LocalizationResolve }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 2021-09-28
    • 2018-09-17
    • 1970-01-01
    • 2018-07-22
    相关资源
    最近更新 更多