我有一个指令,我想在多个模块中使用它。在每个模块上声明它会产生错误。因此,我尝试在共享模块中声明它并将此共享模块导入其他模块。但是,它没有用。它仅在组件自己的模块上准确声明时才有效。
这是我的SharedModule
:
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { GeneralDataService } from './general-data.service';
import {ModalDirective} from '../directives/modal.directive';
@NgModule({
imports: [
CommonModule
],
providers: [GeneralDataService],
declarations: [ModalDirective]
})
export class SharedModule { }
我要使用的模块ModalDirective
:
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { MyComponent } from './patient.component';
import {SharedModule} from '../shared/shared.module';
@NgModule({
imports: [
CommonModule,
SharedModule
],
providers: [ ],
declarations: [ MyComponent ]
})
export class MyModule { }
在MyComponent
组件中:
export class MyComponent implements OnInit, AfterViewInit {
@ViewChild(ModalDirective) modal: ModalDirective;
...
}
如果modal
中未声明MyComponent
,则undefined
中的ngAfterViewInit
为ModalDirective
(即使在MyModule
中)。谁知道如何解决这个问题?
答案 0 :(得分:14)
在您的SharedModule
中,您需要export
ModalDirective
...
@NgModule{(
...
exports: [ModalDirective]
)}
export class SharedModule { ... }
有关详细信息,请参阅共享模块上的docs