2017-03-24 11 views
0

Parentさんの次のスニペットのテンプレートを考えてみましょう:Angular.js 2:ディレクティブのアクセスコンポーネント

<div *ngFor= "let event of events" > 
    <event-thumbnail [theEvent] = 'event'></event-thumbnail>      
</div> 

またevent-thumbnailコンポーネント定義は次のとおりです。Parentコンポーネントクラスで

export class EventThumbnailComponent{ 
    intoroduceYourself(){ 
     console.log('I am X'); 
    } 
} 

、私が欲しいですすべての生成されたevent-thumbnail要素を繰り返し処理し、それぞれの下のコンポーネントにアクセスし、そのうちの1つにintroduceYourself関数を呼び出します。

+1

可能な複製を[子が角2で親イベントをリッスン](http://stackoverflow.com/questions/37677122/child-listens-for-parent -event-in-angular-2)?すなわち、あなたの 'EventThumbnailComponent'が親イベントを聞くことを許可します。そうすることで、dom要素を手動で反復する必要はありません。 – Zze

+0

特に、複製ターゲットで[この回答](http://stackoverflow.com/a/40143881/6680611)をご覧ください。 – cartant

答えて

3

:その後、次のライフサイクルフックを使用することができますこのコンポーネントのインスタンスがビューに追加またはビューから削除されるたびに更新されます。 eventThumbnailsngAfterViewInitまで設定されていないことに注意してください。

詳しくはこちらのドキュメントを参照してください:の https://angular.io/docs/ts/latest/api/core/index/ViewChildren-decorator.html

+0

チャームのように働いた! – Hans

+0

完璧な答え。何もあなたには何もない@DRiFTyですが、私たちがjQueryが提供するレベルよりもはるかに低いdom操作の抽象レベルに後退しているのは悲しいことではありません。 –

0

渡す予定のイベントにアクセスするには、子コンポーネントに@Input() theEventが必要です。

class ParentComponent implements AfterViewInit { 
    @ViewChildren(EventThumbnailComponent) 
    eventThumbnails: QueryList<EventThumbnailComponent>; 

    ngAfterViewInit(): void { 
     // Loop over your components and call the method on each one 
     this.eventThumbnails.forEach(component => component.introduceYourself()); 

     // You can also subscribe to changes... 
     this.eventThumbnails.changes.subscribe(r => {    
      // Do something when the QueryList changes 
     }); 
    } 
} 

eventThumbnailsプロパティは以下となります。あなたはビュー内の特定のコンポーネントタイプのすべてのインスタンスのリストを取得するには@ViewChildren()デコレータを使用したい

ngOnInit(){ 
    introduceYourself(){ 
     console.log('I am X'); 
    } 
} 
関連する問題