gpt4 book ai didi

angular - 使用 forRoot() 导入模块

转载 作者:太空狗 更新时间:2023-10-29 16:59:13 25 4
gpt4 key购买 nike

我正在浏览 example of Angular2 Material我看到所有 Material 模块都使用 forRoot() 方法导入到根模块中。所以在我的应用程序中我也这样做。

现在我需要在其他共享模块中使用一些 Material 组件,这意味着我需要在我的共享模块中导入相关的 Material 包。我不清楚在将它们导入共享模块时是否还需要使用 forRoot() 方法。

在此先感谢您的帮助

最佳答案

forRoot 仅用于主应用模块。这是一种约定,只有应用程序模块才能获得应用程序/单例提供程序。这是为了避免为应用程序多次创建应该是单例的提供程序。例如

import { ModuleWithProviders } '@angular/core';

@NgModule({
declarations: [ SomeDirective ],
exports: [ SomeDirective ]
})
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [ AuthProvider ]
}
}
}

这里我们应该只在导入应用模块时调用forRoot,这样它就可以作为单例只创建一次AuthProvider。所有其他需要 SharedModule 的模块都应该简单地导入 ShareModule 以便它可以使用 SharedDirective

因此,在应用程序模块中调用 forRoot 可以将那个模块提供的所有内容(通常是调用 forRoot 的提供程序)提供给应用程序模块。因此,在您的应用模块中声明的所有组件都可以访问该模块中的所有内容。

但是声明中的所有内容(包括组件、指令和管道)都不会被任何子模块继承。所以我们仍然需要将该模块导入到我们需要它的任何其他模块中。

您的问题似乎专门针对您的 ShareModule。对于这个模块,您不应该使用 forRoot,原因我在上面提到过。您应该只exports MD 模块。只有在 SharedModule 中声明的某些组件实际上需要任何 MD 模块时,才使用 imports。例如,如果您有一个使用 MD 按钮的组件,并且该组件是您在 SharedModule 中声明的共享组件。在这种情况下,您应该importsexports。但是如果没有这样的组件,你只需要exports。这会向您将 SharedModule 导入的任何模块提供 MD 模块。

关于angular - 使用 forRoot() 导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39664861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com