У меня есть несколько компонентов, которые используют в основном одну и ту же таблицу, поэтому я нахожусь в процессе абстрагирования этой таблицы. Я решил большую часть своих потребностей в заполнении динамических таблиц, но еще не нашел решения для следующего.
В одном из моих экземпляров таблицы строки должны быть интерактивными. В исходной таблице я просто добавил событие щелчка в строку и вызвал функцию в моем машинописном файле.
Теперь, когда таблица является дочерним элементом любого потребляющего компонента, я не знаю, как динамически добавить это событие щелчка. Вот, по сути, то, чего я пытаюсь достичь:
HTML:
<tr class="someClass" <!-- want click event here -->>
<td *ngFor="let column of row;"><div [innerHtml]="column"></div></td>
</tr>
Это файл машинописи таблиц, где все данные поступают в объект 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;
}
Однако даже при жестком кодировании в дочернем элементе событие click не распознает функцию в родительском элементе, и я получаю следующую ошибку:
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, поэтому прошу прощения, если этот вопрос упрощен. Заранее благодарю за любую помощь.