2016-12-23 11 views
10

指示文をホストに動的に追加するには( )?ディレクティブを動的に追加する方法は?

私はmyTooltipディレクティブを持っており、そのホストにmdTooltipディレクティブを追加したいと思います。 のElementRef.nativeElementを試しましたが、mdTooltipディレクティブは作成されません。

mytooltip.directive.ts:ホストによって

@Directive({ 
    selector: '[my-tooltip]', 
    host: { 
    '(mouseenter)': 'show()', 
    '(mouseleave)': 'hide()', 
    } 
}) 
export class myTooltip { 
    @Input('my-tooltip') message; 

    constructor() { } 

    show() { 
    /* TODO: How to add md-tooltip directive to elementref (host)? */ 
    } 

    hide() { 
    /* TODO: remove md-tooltip directive from elementref (host) */ 
    } 
} 

私はmyTooltipディレクティブを持つ要素意味:

<span my-tooltip="tooltip hint">Click here</span> 

を結果は、HTML上ではなく、それは希望のMouseEnterに変更されませんスパンでmd-tooltip命令があります。

私がラッパーを使用していて、直接md-tooltipではない理由は、遅延の表示を修正し、遅れを隠し、マテリアルツールチップの動作を他の手段でもカスタマイズしたいからです。

編集どうやら追加するディレクティブは、動的に現在サポートされていません:(私はこの質問にはまだ場合にはここに

我々は角度で求めている機能がある
+0

あなたは 'コンストラクタ(myTooltipプライベートTT)を試してみましたsole.log(tt); } '?これが動作するかどうかは不明です。実際に「ホスト」とは何ですか? ''はコンポーネントのようには見えません。 –

+0

あなたはコンストラクタでプロバイダーをリクエストするときに "注入"を話していますが、この場合はそれを意味するものではありません。私がここに挿入することは、すでにレンダリングされたDOM要素、この場合はスパンにディレクティブを挿入することです。あなたはこれをhtmlのように 'ここをクリックしてください。'しかし、今私はそれを行うプログラム的な方法を探しています。 – RichieRock

+0

これは、注入には名前が付けられていないか、関連していません。ディレクティブを動的に追加することは現在サポートされていません。コンポーネントのみを動的に追加できます。 –

答えて

9

...読みになること、それ材料チームのアップデートすべきだと思いますこの:https://github.com/angular/angular/issues/8785

それを行うための迅速かつ汚い方法を使用することです:

Component.ts

@HostBinding('attr.myHilite') myHilite = new myHilite();

たり、パラメータを持っている場合...

@HostBinding('attr.myHilite') myHilite = new myHilite(this.elementRef);

あなたのディレクティブは、ライフサイクルのフックの1つでコードを実行する必要がある場合は、手動で親のディレクティブライフサイクルフックメソッドを呼び出す必要があります{詐欺:このようなコンポーネントのライフサイクルフックメソッドは...

Component.ts

ngOnInit(){ 
    this.myHilite.ngOnInit(); 
} 
+1

ありがとう!私はこれが今私たちが持っている最高の答えだと思います。他の誰かが似たような質問をしていることに気付きました:http://stackoverflow.com/questions/37148080/use-angular2-directive-in-host-of-another-directive – RichieRock

関連する問題