2017-03-03 11 views
0

* ngifを使用しているため、私のディレクティブがうまく動作しないと思うようです。Angular2 * ngIf with childディレクティブ

コンポーネントHTML:

<div *ngIf="ticket" class="row"> 
    <div class="col-xs-12"> 
     <h4 appUsername>{{ticket.raisedBy.firstName}} {{ticket.raisedBy.surname}}</h4> 
    </div> 
</div> 

指令

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

@Directive({ 
    selector: '[appUsername]' 
}) 

export class UsernameDirective {constructor(el: ElementRef) { 
    console.log('App Username directive init'); 
    el.nativeElement.style.color = 'red'; 
} 
} 

私はngOnInitのJSONサービスからデータを収集していますよう* ngIfがコンポーネントHTMLで必要とされます。

簡潔さのためにコードが無視されました:ディレクティブをエクスポートする「共有」モジュールにディレクティブを追加しています。このモジュールはメインアプリケーションモジュールにインポートされます。

これは既知の問題ですか、それとも私のコードですか?

更新私はこれを今ではうまく利用していますが、コンポーネントを含むモジュールにディレクティブをインポートする必要があります。それをAppModuleにインポートして、グローバルに使用することはできませんか?

+0

何が問題なのですか?期待される行動は何ですか? 'red'コードを' ngAfterViewInit() 'に移動しようとしましたか? –

+0

@GünterZöchbauerDirectiveは、コンポーネントHTML内のh4内のテキストの色を変更していません。 console.logを起動しない –

+0

上記のコンポーネントを含むモジュールに共有モジュールをインポートしましたか? –

答えて

0

Angularモジュールシステムは、このように動作します:

  • あなたはまさにONE NgModuleに/ ... declareComponent/Directiveする必要があります。
    NgModuleの一部であるComponentで使用できます。
  • Component/Directive/...他NgModuleでは、あなたがそれを使用したいNgModuleに宣言NgModuleimport宣言NgModuleからそれをexportする必要が使用します。あなたのケースでは

あなたdeclareexportSharedModuleimportAppModuleSharedModuleDirectiveが、あなたは知っていないため、importSharedModuleをしませんし、ないimportAppModuleを行い、その、他のNgModuleDirectiveを使用あなたのDirective

だから NgModuleで何かを使用するように、それはそれ、 importdeclareする必要 import sが NgModuleを宣言 NgModuleimport NgModuleを宣言する。
インポートは、 NgModuleDirectiveをエクスポートする場合にのみ機能します。