2017-11-20 18 views
0

親コンポーネントから子コンポーネントにデータを送信しようとしていますが、途中のng2スマートテーブルに問題があります。発光する。親コンポーネントでは、userRowSelect(標準関数)を使用するng2-smart-tableを使用します。テーブル内の行を選択すると、その行からすべてのデータが取得されます。その行から、私の子コンポーネントに渡したいデータ。私は共用サービスを使用しようとしましたが、入力と発光は、どれもこれまで働いていませんでした。以下は、2つのコンポーネントのコードスニペットです。何をすべきかに関する提案はありますか?Angular4親から子にデータを渡しても動作しません

親HTML:

<ng2-smart-table [settings]="settings" [source]="data" (userRowSelect)="onRowSelect($event)"></ng2-smart-table> 

親コンポーネント:

@Output() passDataToViewPdf: EventEmitter<any> = new EventEmitter(); 

    ngOnInit() { 
     this.reportService.getReportsTemplates().subscribe(response => this.data = response); 
    } 

    onRowSelect(event): void { 
     this.passDataToViewPdf.next(event); 
     this.router.navigate(['/report-view-pdf', localStorage.getItem('siteId')]); 
    } 

子コンポーネント:

@Input() template; 

    public handleEvent(event) { 
      // get data from passDataToViewPdf emitter 
     } 
    ngOnInit() { this.template = // get data from handleEvent} 
+1

TS

<child-component [pdf]="pdfValueInParent"></child-component> 

親コンポーネント親。親から子供へのイベントを出そうとしているようです。それは単純に角度が働く方法ではありません。入力は、親から子にデータを渡すために使用されます。 –

+0

@JBNizetこれを明確にしていただきありがとうございます! – viddrawings

+0

https://stackoverflow.com/questions/35884451/angular-2-sibling-component-communicationおよびhttps://stackoverflow.com/questions/31026886/how-do-i-share-data-between-components-in -angular-2とhttps://stackoverflow.com/questions/41451375/passing-data-into-router-outlet-child-components-angular-2 – Alex

答えて

1

Angulars EventEmitter値を発するemit方法を有しているためです。それは親が子供にはありませんし、あなたの親コンポーネントが値を放出しているので、それはしかし、親コンポーネントで定義されているあなたのコードEventEmitterを見

this.passDataToViewPdf.emit(event); 

でなければなりませんdocs

を見てください。

これは次のようになります。

チャイルドコンポーネント

@Input() template; 
@Input() set pdf(newPdf) { 
    this._pdf = newPdf; 
    this.handleEvent(newPdf); 
}; 
private _pdf; 



public handleEvent(event) { 
    // process your data 
} 
ngOnInit() { this.template = // get data from handleEvent} 

親HTMLテンプレート出力は、子供から、受信することができるイベントを放出するために使用される

onRowSelect(event): void { 
     this.pdfValueInParent = event; 
     this.router.navigate(['/report-view-pdf', localStorage.getItem('siteId')]); 
    } 
+0

私の子供のコンポーネントを別のページに読み込み、そのページにルーティングします親(/ report-view-pdf)のonRowSelect関数を使用します。私は、子要素選択子を親html自体に含めません。セレクタをparent-htmlに含めることなく、私の子供にデータを引き続き取得するにはどうすればよいですか? – viddrawings

+0

さて、あなたはいくつかの方法でそれを行うことができます。まず、データを保存して共有する 'service'があります。それが小さいデータなら 'localStorage'を使うか、' router'を使って渡すことができます。最も迅速かつ安全な方法は、データを 'service'に保存し、' child'コンポーネントの中の 'service'からデータを取得することです。 (サービスによって私は小さな「角度サービス」を意味するか、あるいは「シングルトン」を作ることができます) –

+0

私はjson-dataをたくさん渡さなければならないので、共有サービスを既に持っています。私は大量のデータのために共有サービスを使用することができますが、これまで私はアプリケーション内でコンポーネントからコンポーネントへの値を1つだけ渡すだけでした。 – viddrawings

関連する問題