【问题标题】:What kind of code we write inside class declared under ngModule decorator?我们在 ngModule 装饰器下声明的类中编写了什么样的代码?
【发布时间】:2017-02-16 02:19:44
【问题描述】:

我刚刚开始学习 Angular。我遇到了几个在空的class 上使用ngModule 装饰器的例子。

我想知道的是...在ngModule 装饰器下方直接声明的class 是仅用于初始化模块还是有其他用途?

【问题讨论】:

    标签: angular typescript dependency-injection ng-modules


    【解决方案1】:

    该类仅用作您可以从 typescript 导入的参考。 装饰器不能在没有要装饰的类或成员的情况下放置。

    编译后,它会保存你用来装饰那个类的注解。 Angular 将使用这些来配置注入器,尤其是当组件需要注入给定成员类型时,它需要创建哪个类。

    现在,您可以在构造函数中添加一些内容,例如,如果您想在模块(和相关的组件/提供者)即将被注入时执行某些操作。这是我现在能想到的唯一用途。

    [edit] 我只是在应用启动时使用它来注册语言环境。

    export class AppModule {
        constructor() {
            registerLocaleData(localeDeCH);
        }
    }
    

    这个想法来自here,他们没有指定在哪里打电话给registerLocaleData

    【讨论】:

      【解决方案2】:

      例如,您可以使用构造函数或实现ngDoBootstrap 在第一次加载延迟加载的模块(初始化)时执行代码

      您还可以将服务注入构造函数,以便在初始化应用程序或延迟加载模块时由 DI 实例化它们。

      我不记得看到过其他例子。 除此之外,它只带有@NgModule() 装饰器和那里提供的信息。 (构建应用时可能会生成一些额外的代码)

      另请参阅https://angular.io/guide/entry-components 中的ngDoBootstrap 评论

      【讨论】:

      • @yurzui 谢谢。我知道我还有别的东西。我想我在几个月前的一个很好的答案中看到了这一点。
      • 你有任何代码示例可以分享吗?
      • 只需添加一个构造函数或ngDoBootstrap 并添加您选择的要执行的代码。我看到了一些被问到的问题,但我自己不知道用例。
      • vs @GünterZöchbauer 我没有机会获得赏金 :-)
      • @FlavienVolken 对此感到抱歉:-/
      【解决方案3】:

      查看 angular NgModules 的官方文档。 https://angular.io/guide/ngmodules

      以下内容来自于:

      @NgModule 接受一个元数据对象,该对象描述如何编译组件的模板以及如何在运行时创建注入器

      NgModule 元数据执行以下操作:

      1. 声明哪些组件、指令和管道属于模块。
      2. 公开其中一些组件、指令和管道,以便其他模块的组件模板可以使用它们。
      3. 使用当前模块中的组件所需的组件、指令和管道导入其他模块。 提供
      4. 其他应用程序组件中的服务可以使用。

      【讨论】:

        【解决方案4】:

        您需要有效export 的类声明。 模块使用导入进行初始化,但您可以从类导出中访问功能(实际上,您在导入什么?)

        希望这有帮助

        编辑 --

        “类的主体是空的。但是类上方的装饰器 (@NgModule) 为该类提供了功能。所以实际上,该类不是空的。它只是不需要任何额外的逻辑之后装饰器应用于它。bootstrapModule 将一个类作为输入,并假定该类用@NgModule 进行装饰,其配置方式类似于您所拥有的(声明、导入、提供程序等)。” 来自:Why Angular export empty class in app.modules.ts?

        【讨论】:

        • 我完全不明白
        猜你喜欢
        • 2019-03-02
        • 2016-11-26
        • 2014-05-01
        • 2019-01-18
        • 2012-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多