2016-05-10 10 views
8

hostプロパティを使用して別のディレクティブからディレクティブを追加したいが、他のディレクティブを参照する方法はないようだ。Angular2ディレクティブを別のディレクティブのホストで使用する

@Directive({ 
    selector: '[one]', 
    host: { '[two]': '"some-value"' } 
    // How can I reference DirectiveTwo here? 
}) 
export class DirectiveOne { } 

@Directive({ 
    selector: '[two]' 
}) 
export class DirectiveTwo { } 

この場合、「既知のネイティブプロパティではないため、2つの 'にバインドできません」という標準が取得されます。

別のディレクティブを参照して使用する正しい方法は何ですか?

答えて

10

ディレクティブは、静的に追加されたHTML(要素、ID、属性、クラスなど)と一致するセレクタに対してのみ、Angularによってインスタンス化されます。
@Component()または@Directive()デコレータのhostパラメータを使用してディレクティブをインスタンス化する方法はありません。 ViewContainerRef.createComponent()(旧DynamicComponentLoader

を使用してディレクティブを動的に作成する方法もありません。同じ要素に静的に追加されたHTMLがあるため、Angularによってインスタンス化された別のディレクティブへの参照を取得できます。

+3

そのような場合、あるディレクティブを他のディレクティブの機能を拡張または使用するためのベストプラクティスは何ですか?これはかなり重要な制限のようです。 –

+0

@ YonaAppletreeは実際には同じ質問をしています。 1つのディレクティブ機能を他のディレクティブでどのように拡張できますか?この場合、コードを再利用する方法は? –

+0

これはもっと大きなアップデートのトピックです。https://github.com/angular/angular/issues/11606 –

関連する問題