У меня есть директива, и я хочу использовать ее в нескольких модулях. Объявление его на каждом модуле вызывает ошибку. Таким образом, я попытался объявить его в общем модуле и импортировать этот общий модуль в другие модули. Однако это не сработало. Он работает только тогда, когда он объявлен точно на собственном модуле компонента.Angular2 - Директива не работает, если не объявлена в том же модуле
Вот мой 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
. Кто-нибудь знает, как это исправить?
Worked. Спасибо! –
Thx Fredrik! Моя директива имеет инъекцию «TemplateRef». Однако, когда я добавляю директиву в список «NgModule.exports», я получил сообщение об ошибке «Нет провайдера для TemplateRef!». Есть идеи? – cosmozhang
@cosmozhang - не могу сказать, не видя ваш код, но взгляните на эту тему: https://stackoverflow.com/questions/35932074/angular2-no-provider-for-templateref-ngif-templateref –