首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有异步导入模块的延迟NgModule声明

带有异步导入模块的延迟NgModule声明
EN

Stack Overflow用户
提问于 2019-07-22 15:24:51
回答 1查看 330关注 0票数 1

我想动态导入第三方模块并检查它。那么NgModule中的声明取决于它是否存在(真/假)。就像我下面的代码。问题是:动态导入是一个承诺。我需要导入承诺加载后的NgModule声明。我怎么能解决呢?

代码语言:javascript
复制
let loaded = false;

import('ngx-color-picker').then((module) => {
    console.log(module);
    loaded = true;
}); // => it takes time

// the Module suddenly declaration => i need to delay it somehow and
// runs AFTER the above import Promise has loaded
@NgModule({
    declarations: [
        loaded ? SmNgxColorPickerComponent : [],
    ],
    imports: [
        // --- Angular Base imports ---
        CommonModule,
        ReactiveFormsModule,

        // --- Angular Material imports ---
        MatInputModule,

        // --- Vendor imports ---
        loaded ? ColorPickerModule : [],
    ],
    exports: [
        loaded ? SmNgxColorPickerComponent : [],
    ],
    providers: []
})
export class SmNgxColorPickerModule {

}
EN

回答 1

Stack Overflow用户

发布于 2022-04-29 13:18:00

在最新的下一个版本中,现在可以使用顶级等待来完成它了。(https://github.com/tc39/proposal-top-level-await)

若要启用顶层,请等待角度:

  1. 在模块中使用esnext (es2022),在目标中使用es2017或更高的(tsconfig.json)
代码语言:javascript
复制
"target": "es2017", // or higher
"module": "esnext",
  1. 为webpack启用experiments.topLevelAwait (webpack.config.js)
代码语言:javascript
复制
module.exports = {
    experiments: { topLevelAwait: true }
};
  1. 现在可以使用等待外部异步函数。
代码语言:javascript
复制
const fix = await import('library').then(
  _ => loaded = true
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57149173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档