2016-11-25 3 views
1

Я пытаюсь зарегистрировать несколько обычно используемых директив в моем основном модуле, чтобы иметь возможность использовать их во всех подмодулях и иметь только одну копию.Angular2 - Регистрация директивы на уровне приложения

Моя проблема заключается в том, что по какой-то причине директива распознается только в объявленных компонентах основного модуля, но ни один из дочерних модулей не использует ее.

Я делаю что-то неправильно? Существует ли уклонная концепция, которую я здесь отсутствует? Это основной модуль и простая директива, которую я пытаюсь использовать в дочерних модулях, импортированных в основной модуль.

У меня нет какой-либо ошибки или каких-либо признаков, я делаю что-то неправильно. Чтобы сохранить его, я отредактировал часть импорта. Дайте мне знать, если есть что-то еще, что я должен добавить.

Директива:

import {Directive, OnChanges, Input, ElementRef, Renderer} from '@angular/core'; 

@Directive({ 
    selector:'[readonlyCustom]' 
}) 
export class ReadonlyDirective implements OnChanges{ 
    @Input('readonlyCustom') val: boolean; 
    constructor(private el: ElementRef, private renderer: Renderer) {} 

    ngOnChanges(c){ 
     if(c && c.val && c.val.currentValue === true){ 
      this.el.nativeElement.readonly = c.val.currentValue; 
     } 
     else if(c && c.val && c.val.currentValue === false){ 
      this.el.nativeElement.readonly = c.val.currentValue; 
     } 
    } 
} 

AppModule.ts

/* .... A bunch of imports... */ 
import {PolymerElement} from "@vaadin/angular2-polymer"; 
import {ReadonlyDirective} from "./shared/directives/readonlyDirective"; 



@NgModule({ 
    declarations: [ 
    /*some other declarations */ 

    ReadonlyDirective 
    ], 
    imports: [ 
    /* ... some module imports ....*/ 
    /* ... child modules ....*/ 
    UsersModule, 
    RolesModule, 
    OrgModule, 
    GroupsModule, 
    ], 
    entryComponents:[/*some components*/], 
    providers: [/*some services*/], 
    bootstrap: [AppComponent], 

    schemas:[CUSTOM_ELEMENTS_SCHEMA] 
}) 
export class AppModule { } 

Edit: Я использую полимерные компоненты внутри моего приложения и использование Angular2-полимера из Vaadin. Кажется, что я должен упомянуть PolyymerElement («полимер-элемент-имя») в каждом модуле, чтобы распознать привязку данных. Возможно ли это сделать и на уровне приложения?

ответ

1

Я нашел ответ с помощью Günter Zöchbauer, который был достаточно любезен, чтобы отредактировать его ответ here.

Я также нашел другой ответ на вопрос, который помог here.

Смежные вопросы