我有一个模块AppModule
,另一个模块说FooModule
。我在FooModule
和我有一些组件。我正在加载FooModule
中的AppModule
路由,就像任何普通应用一样。
以下是AppModule
的示例代码:
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router'
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from 'app/components/app';
@NgModule({
imports: [
BrowserModule,
RouterModule.forRoot([
{
path: 'foo',
loadChildren: './foo.module#FooModule'
}
])
],
declarations: [AppComponent],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {}
以下是FooModule
的示例代码:
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router'
import { FooComponent } from 'app/components/foo';
@NgModule({
imports: [
RouterModule.forChild([
{
path: '',
component: FooComponent
}
])
],
declarations: [FooComponent],
})
export class FooModule {}
现在,当我运行应用程序时,我'我收到Can't bind to 'ngIf' since it isn't a known property of 'div'.
错误,根据我的理解不应该发生因为我'}我在BrowserModule
中使用AppModule
并在FooModule
中加载AppModule
的路由。
我错过了什么吗?
我'我正在使用Angular CLI v1.2.0
和Angular 4.2.5
。
我知道要解决此问题,我需要在CommonModule
中导入FooModule
。但这正是我'我首先提出这个问题,当我在BrowserModule
中导入AppModule
并重新导出CommonModule
时,为什么我需要在每个单独的模块中加入CommonModule
?
由于
答案 0 :(得分:5)
在每个功能模块中,例如您需要导入fooModule
CommonModule
。它包含通用指令和管道。
实际上,BrowserModule
导入并重新导出CommonModule
,因此它们会导出相同的功能。
有关详细信息,请参阅:https://www.youtube.com/watch?v=ntJ-P-Cvo7o&t=2s
更新
模块不是继承的。换句话说,除非导入该模块或导出它的其他模块,否则无法获得模块的功能。
如上图所示...如果共享模块导入表单模块和应用程序模块导入共享模块,则应用程序模块将无法访问表单模块组件,指令和管道(例如本示例中的ngModel),除非共享模块导出表单模块。
KEY:
答案 1 :(得分:1)
将CommonModule
导入FooModule
和任何其他模块。 BrowserModule
导入CommonModule
。 CommonModule
包含*ngIf
等指令