Angular-导入BrowserAnimationsModule和NoopAnimationsModule并决定在运行时使用什么(使用AOT)

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

问题是:

我只想在IE上导入NoopAnimationsModule。在我的app.module的imports数组中,我有类似的东西:

imports: [AppConfig.IS_IE ? NoopAnimationsModule : BrowserAnimationsModule, .... ]

这在开发期间有效,但在生产中无效。我想这与代码导入之前的AOT编译有关到达浏览器。

我得出的结论是,我必须同时导入它们和在运行时配置一些东西,以便决定应使用哪个模块的提供程序。

请记住,这两个模块都提供相同的服务,但是要有所不同,以改变Angular处理动画的方式。

有没有办法实现这个想法?

angular typescript jit aot
1个回答
0
投票

这很有趣。您是正确的,尽管那个aot可以防止这种情况发生,但是据我所知,对于常春藤,应该已经可以按照您的方式来做了,但我不确定

刚刚测试,您是对的,具有这样的动态值,它尚不起作用

如果不是,或者您尚未更新到最新版本,请参见下文:

所以我假设您的AppConfig.IS_IE在导入动画模块之前已设置。通过查看源代码,我相信您可以通过创建自定义动画模块来执行以下操作:

@NgModule()
export class ConfigAnimationsModule {
  static forRoot(): ModuleWithProviders<BrowserAnimationsModule | NoopAnimationsModule> {
    return {
      ngModule: AppConfig.IS_IE ? NoopAnimationsModule : BrowserAnimationsModule
    };
  }
}

然后可以导入:

imports: [
  ConfigAnimationsModule.forRoot(),
  //...
]
© www.soinside.com 2019 - 2024. All rights reserved.