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. Кто-нибудь знает, как это исправить?


person Bünyamin Sarıgül    schedule 09.02.2017    source источник


Ответы (1)


В вашем SharedModule вам нужно export ModalDirective

...

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

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

person Fredrik Lundin    schedule 09.02.2017
comment
Спасибо, Фредрик! В моей директиве есть инъекция TemplateRef. Однако, когда я добавляю директиву в список NgModule.exports, я получаю сообщение об ошибке No provider for TemplateRef!. Любые идеи? - person Cosmo; 13.08.2017
comment
@cosmozhang - не могу сказать, не видя вашего кода, но взгляните на эту тему: stackoverflow.com/questions/35932074/ - person Fredrik Lundin; 14.08.2017
comment
У меня не работает даже после добавления в экспорт - person Himanshu Arora; 27.09.2018