Имам няколко компонента, които използват основно една и съща таблица, така че съм в процес на абстрахиране на тази таблица. Реших повечето от моите нужди от популация на динамични таблици, но все още не съм намерил решение за следното.
В един от екземплярите на моята таблица редовете трябва да могат да се кликват. В оригиналната таблица просто добавих събитие за щракване в реда и го накарах да извика функция в моя машинописен файл.
Сега, когато таблицата е дъщерна на всеки консумиращ компонент, не съм сигурен как да добавя динамично това събитие за кликване. Ето какво по същество се опитвам да постигна:
HTML:
<tr class="someClass" <!-- want click event here -->>
<td *ngFor="let column of row;"><div [innerHtml]="column"></div></td>
</tr>
Това е файлът с typescript на таблиците, където всички данни влизат в обекта visibleData:
export class GenericTableComponent implements OnInit {
@Input() visibleData;
constructor() { }
ngOnInit() {
}
}
Тук внедрявам общата таблица в моя родителски HTML
Parent HTML:
<oma-generic-table [visibleData]="visibleData"></oma-generic-table>
И тук има функция в родителя, която подготвя данните. Опитах се да запазя събитието за щракване в низ и да го предам, но всичко, което опитах досега, се провали (свързване на данни с {{}}, квадратни скоби и т.н.).
transformData(visibleData) {
const ret: any = {};
ret.headings = visibleData.headings;
ret.action = '(click)="rowClicked([row.id])"';
ret.checkbox = this.checkBox; //add if the table needs checkboxes
ret.content = [];
for (let i = 0; i < visibleData.content.length; i++) {
ret.content.push(_.values(_.omit(visibleData.content[i], 'id')));
}
return ret;
}
Въпреки това, дори когато е твърдо кодирано в дъщерния елемент, събитието за кликване не разпознава функцията в родителския елемент и получавам следната грешка:
EXCEPTION: Error in ./GenericTableComponent class GenericTableComponent - inline template:35:4 caused by: self.parentView.context.rowClicked is not a function
ORIGINAL EXCEPTION: self.parentView.context.rowClicked is not a function
Не съм сигурен дали това е нещо просто или не. Нов съм в Angular 2, така че се извинявам, ако този въпрос е опростен. Благодаря предварително за всяка помощ.