2016-11-25 8 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 { } 

編集:私は私のアプリ内でポリマー成分を使用し、VaadinからAngular2ポリマーを使用しています。 データバインディングが認識されるためには、各モジュールでPolymerElement( "polymer-element-name")に言及する必要があるようです。アプリレベルでもそれを行うことは可能ですか?

答えて

1

私はGünter Zöchbauerの助けを借りて彼の答えhereを編集するのに十分親切だった回答を見つけました。

また、hereに役立つ別の質問回答が見つかりました。

関連する問題