2017-08-15 134 views
0

我在下面的HTML創建一個共享組件具有:共享組件

<ion-row class="tableContainer"> 
    <table class="dataTable"> 
    <tbody> 
     <tr *ngFor="let row of data"> 
     <!-- Some code is omitted --> 

     <td *ngFor="let b of dataButtons" ngClass="{{b.styleClass}}"> 
      <ion-icon title={{b.styleClass}} name={{b.value}} (click)="clickTest()"></ion-icon> 
     </td> 
     </tr> 
    </tbody> 
    </table> 
</ion-row> 

然後,我可以在一些網頁中使用它們像這樣:

<data-table [dataTitle]="invoicesDataTitle" [data]="invoicesData" [dataButtons]="invoicesDataButtons"></data-table> 

我的問題是,當我點擊按鈕,我想調用頁面中使用data-table的方法,而不是data-table組件中的方法。我怎樣才能做到這一點?

+1

我想這是包括在文檔:家長對兒童的事件監聽](https://angular.io/guide/component -interaction#家長監聽換子事件)。 –

+1

正確。使用EventEmitter或共享服務。取決於您的應用程序的複雜性 – MeMeMax

回答

1

處理此問題的正確方法是讓您的組件發出父母可以收聽的事件。

<data-table [dataTitle]="invoicesDataTitle" [data]="invoicesData" [dataButtons]="invoicesDataButtons" (dataClick)="currentPageHandler($event)"></data-table> 

內,您的數據table.component.ts

@Output() dataClick = new EventEmitter<SomeEventType>(); 

clickTest() { 
    this.dataClick.emit({data: someData} as SomeEventType); 
} 
+0

通過這樣做,每個頁面現在是否可以擁有自己的點擊方法? –

+0

是的,每個父組件都可以實現自己的單擊處理程序,以便在單擊'ion-icon'元素時執行的操作。 – ChrisG