2017-02-09 14 views
6

У меня есть директива, и я хочу использовать ее в нескольких модулях. Объявление его на каждом модуле вызывает ошибку. Таким образом, я попытался объявить его в общем модуле и импортировать этот общий модуль в другие модули. Однако это не сработало. Он работает только тогда, когда он объявлен точно на собственном модуле компонента.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. Кто-нибудь знает, как это исправить?

ответ

10

В вашей SharedModule вам нужно exportModalDirective

... 

@NgModule{(
    ... 
    exports: [ModalDirective] 
)} 
export class SharedModule { ... } 

См docs на общих модулей для получения дополнительной информации

+0

Worked. Спасибо! –

+0

Thx Fredrik! Моя директива имеет инъекцию «TemplateRef». Однако, когда я добавляю директиву в список «NgModule.exports», я получил сообщение об ошибке «Нет провайдера для TemplateRef!». Есть идеи? – cosmozhang

+0

@cosmozhang - не могу сказать, не видя ваш код, но взгляните на эту тему: https://stackoverflow.com/questions/35932074/angular2-no-provider-for-templateref-ngif-templateref –