Pic*_*cci 14 angular2-material angular
我将通过Angular2 Material的示例,我看到所有Material模块都是使用该forRoot()方法在根模块中导入的.所以在我的应用程序中我也这样做.
现在我需要在其他Shared模块中使用一些Material组件,这意味着我需要在Shared模块中导入相关的Material包.我不清楚forRoot()在共享模块中导入它们时是否还需要使用该方法.
在此先感谢您的帮助
Pau*_*tha 44
forRoot仅用于主app模块.这是一个使用的约定,只有app模块才能获得应用程序/单例提供程序.这是为了避免被认为是单身的提供者,为应用程序创建多次.例如
import { ModuleWithProviders } '@angular/core';
@NgModule({
declarations: [ SomeDirective ],
exports: [ SomeDirective ]
})
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [ AuthProvider ]
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这里我们只应该forRoot在导入到app模块时调用,这样它才能创建AuthProvider一次作为单例.所有其他需要的模块SharedModule应该只需导入,ShareModule以便它可以使用SharedDirective.
因此,调用forRootapp模块可以将该模块提供的所有内容(以及通常调用的提供程序forRoot)提供给app模块.因此,在您的应用模块中声明的所有组件都可以访问该模块中的所有内容.
但是declarations(包括组件,指令和管道)中的所有内容都不会被任何子模块继承.所以我们仍然需要将模块导入到我们需要的任何其他模块中.
你的问题似乎是关于你的ShareModule.对于这个模块,你不应该使用forRoot,因为我上面提到的原因.你应该只是exportsMD模块.只有imports在声明的某个组件SharedModule实际需要任何MD模块时才使用.例如,如果您有一个使用MD按钮的组件,并且该组件是您在其中声明的共享组件SharedModule.在这种情况下你应该imports和exports.但如果没有这样的组件,你只需要exports.这为您导入的任何模块提供了MD模块SharedModule.
| 归档时间: |
|
| 查看次数: |
14167 次 |
| 最近记录: |