2017-03-11 13 views
1

メインコンポーネント:角度* 2のテンプレート変数はどのように動作しますか?

Htmlの上記のコードで

<event-thumbnail *ngFor='let event1 of events' #thumbnail [event2]="event1" (eventClick)='handleEventClicked($event)'>Hello</event-thumbnail> 
<button class='btn btn-primary' (click)="thumbnail.alertFoo()">alert id</button> 
<button class='btn btn-primary' (click)='thumbnail.handleClickMe()'>click me!</button> 

イベントサムネイルComponenent

alertFoo(){ 
    alert("id called"); 
    } 

    handleClickMe(){ 
    this.eventClick.emit('foo'); 
    alert('click'); 
    } 

私はサムネイルを使用して、ボタンを使用することができません - >テンプレート変数* ngForすなわちを使用。 alertFooとhandleClickMe()はサムネイルで呼び出されません。私はdivの中にそれをラップしようとしましたが、まだそれは動作しません。それは、div内のコード全体を* ngForで囲んでいるとき、つまり望ましくない複数のボタンを表示するボタンの場合にのみ機能します。私は、イベントを繰り返すが、ボタンは一度しか表示されないようにするために、ngForワークがどのように動作するかを理解したい。

+1

?接頭辞「サムネイル」とは何ですか?確かに、私は尋ねている理由です。この問題を解決するためのコードはごくわずかです。もしあなたがプランナーで問題を再現できるのであれば最高ですね:)# – Alex

+0

@ AJT_82私は上記のコードは自己説明的だと思います..... angular2 #thumbnailはテンプレートの変数です私はalertzfoo()とhandleClickMe()メソッドを呼び出すようにしようとしています上記のコードスナップでは動作していないテンプレート変数のサムネイルを介してイベントサムネイルコンポーネントを表示するdiv内のすべてをカプセル化するとき私はそれとして私のページにまた、ngForの一部になります。 –

+0

コードはわかりやすいものではありませんでしたが、ここではこれらのメソッドがどこにあるか、つまりイベントサムネイルコンポーネントで提供されているので、もっと明確になりました。 – Alex

答えて

1

この目的でViewChildを使用してください。ここに例があります。あなたのコンポーネントの名前の正確さを知らないので、ここではダミーの名前を使用しています。だから、親:

テンプレート:

<button (click)="alertFooInChild()">Click</button> 

TS:

@ViewChild(AppChild) appChild: AppChild; 

alertFooInChild() { 
    // call the method in the child 
    this.appChild.alertFoo(); 
} 

はここだ、これらのメソッドは実際には何demo plunker :)

+0

これは助けてくれてありがとうございます...私はここでも親子ブランチのViewChildのスコープが分かります子供と子供。私は親と子のためにそれを行うときに上記が働くので、私は親child1とchild2の2つのコンポーネントフォルダを持っている私はchild1とchild2のために同じことができます。私は、CLIを使用してコンポーネントを自動生成しています。 –

+1

私はお手伝いできることを嬉しく思います。ええ、この解決法は、親と子のためのものです。他のコンポーネントの通信が必要な場合は、共有サービスがおそらく行く方法です:) – Alex

関連する問題