2017-02-09 3 views
6

Ich habe eine Direktive und ich möchte es in mehreren Modulen verwenden. Die Deklaration auf jedem Modul erzeugt einen Fehler. Daher habe ich versucht, es in einem geteilten Modul zu deklarieren und dieses geteilte Modul in andere Module zu importieren. Es hat jedoch nicht funktioniert. Es funktioniert nur, wenn es genau auf dem komponenteneigenen Modul deklariert ist. HierAngular2 - Richtlinie funktioniert nicht, wenn nicht in demselben Modul

ist mein 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 { } 

Und das Modul, das ich will ModalDirective zu verwenden:

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 { } 

In MyComponent Komponente:

export class MyComponent implements OnInit, AfterViewInit { 

    @ViewChild(ModalDirective) modal: ModalDirective; 

    ... 
} 

modal in MyComponent ist undefined (auch in ngAfterViewInit) wenn ModalDirective nicht in MyModule deklariert ist. Weiß jemand, wie man das repariert?

Antwort

10

In Ihrem SharedModule benötigen Sie bitte den ModalDirective

... 

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

Siehe docs auf gemeinsam genutzten Module für weitere Informationen

+0

Arbeitete export. Vielen Dank! –

+0

Thx Fredrik! Meine Direktive enthält eine Injektion von 'TemplateRef'. Wenn ich jedoch die Anweisung in die 'NgModule.exports'-Liste hinzufüge, habe ich einen Fehler mit dem Hinweis 'Kein Provider für TemplateRef!' Erhalten. Irgendwelche Ideen? – cosmozhang

+0

@cosmozhang - kann nicht wirklich sagen, ohne Ihren Code zu sehen, aber werfen Sie einen Blick auf diesen Thread: https://StackOverflow.com/Questions/35932074/angular2-No-Provider-for-TemplateRef-Ngf-TemplateRef –

Verwandte Themen