在我的应用程序中,我有两个模块。 IdentityModule and ServiceModule
。它们是作为延迟加载技术加载的。
现在,我创建了一个与IconSpacerDirective
绑定的自定义指令app.module.ts
。我的app.component.ts
内部运行良好。
但是它在IdentityModule
内部不起作用。我遇到此错误:
ERROR Error: Uncaught (in promise): Error: Type IconSpacerDirective is part of the declarations of 2 modules: AppModule and IdentityRegistryModule! Please consider moving IconSpacerDirective to a higher module that imports AppModule and IdentityRegistryModule. You can also create a new NgModule that exports and includes IconSpacerDirective then import that NgModule in AppModule and IdentityRegistryModule.
Error: Type IconSpacerDirective is part of the declarations of 2 modules: AppModule and IdentityRegistryModule! Please consider moving IconSpacerDirective to a higher module that imports AppModule and IdentityRegistryModule. You can also create a new NgModule that exports and includes IconSpacerDirective then import that NgModule in AppModule and IdentityRegistryModule.
这是我的identityRegistryModule
:
import { IconSpacerDirective } from '../shared/custom-directive/icon-spacer.directive';
@NgModule({
declarations: [
IconSpacerDirective
],
imports: [
IdentityRegistryRoutingModule,
MaterialModule
],
providers: [
IdentityService,
],
})
export class IdentityRegistryModule { }
我的app.module.ts
如下:
import { IconSpacerDirective } from './shared/custom-directive/icon-spacer.directive';
@NgModule({
declarations: [
AppComponent,
MainNavComponent,
SideNavComponent,
HeaderComponent,
HomeComponent,
IconSpacerDirective,
],
imports: [
BrowserModule,
HttpClientModule,
AppRoutingModule,
FlexLayoutModule,
BrowserAnimationsModule,
LayoutModule,
MaterialModule,
OAuthModule.forRoot(),
],
providers: [],
bootstrap: [AppComponent],
//exports: [IconSpacerDirective]
})
export class AppModule { }
如何在IconSpacerDirective
中使用identityRegistryModule
答案 0 :(得分:2)
如果要在IconSpacerDirective
和AppModule
中同时使用IdentityRegistryModule
,则需要为该指令创建一个单独的模块,然后可以将其导入其中的模块中。您需要它。
@NgModule({
declarations: [IconSpacerDirective],
exports: [IconSpacerDirective]
})
export class IconSpacerModule { }
@NgModule({
imports: [IconSpacerModule]
})
export class AppModule { }
@NgModule({
imports: [IconSpacerModule]
})
export class IdentityRegistryModule { }
答案 1 :(得分:1)
由于要导入模块,因此无需再次明确声明它。将其从IdentityRegistryModule
的声明中删除,因为这是错误明确指出的内容。
在app.module中,导出IconSpacerDirective
@NgModule({
...
exports: [IconSpacerDirective] // so that it can be used when this module is imported
})
export class AppModule { }
并将app.module导入identityRegistryModule
@NgModule({
imports: [
IdentityRegistryRoutingModule,
MaterialModule,
AppModule
]
...
})
export class IdentityRegistryModule { }
答案 2 :(得分:0)
如果只想在IdentityModule中使用该指令,则无需在App.module中添加它。在“身份”模块中声明它并使用它。但是,如果您想在多个模块(包括app.module中的组件)中使用指令,请为常见指令创建单独的模块,例如:
通用指令模块
@NgModule({
declarations: [IconSpacerDirective],
exports:[IconSpacerDirective]
})
export class MyCommonModule{}
然后将其导出到您想要的任何位置。假设您想将其用于app.module中的组件以及Identity模块中的组件,请遵循以下逻辑:
app.module.ts
@NgModule({
imports: [MyCommonModule]
})
identiyt.module.ts
从'../shared/custom-directive/icon-spacer.directive'导入{IconSpacerDirective};
@NgModule({
imports: [
IdentityRegistryRoutingModule,
MaterialModule,
**MyCommonModule**
],
providers: [
IdentityService,
],
})
export class IdentityRegistryModule { }