У меня есть ng-table
, который является дочерним компонентом моей главной страницы. При щелчке по строке он отправляет информацию в этой строке через onCellClick
с использованием EventEmitter
. Я пытаюсь отправить эту информацию другому дочернему компоненту. Это, случается, кнопка, которая является дочерним по модулю Bootstrap 4, который появляется при нажатии кнопки на главной странице. Просто возникают проблемы с получением и манипулированием этой информацией. Использование @input и @output между Угловыми 2 дочерними компонентами
HTML таблицы дочерних компонентов:
<ng-table [config]="config"
(tableChanged)="onChangeTable(config)"
(cellClicked)="onCellClick($event)"
[rows]="rows" [columns]="columns">
</ng-table>
HTML для компонента ребенка (это отображается в HTML главной страницы):
<app-datatable (row)="received($event)"></app-datatable>
Машинопись для получения и отправки данные строки (this.row
- это EvenEmitter. data.row
- это фактический номер, который нажал):
@Output() row: EventEmitter<any> = new EventEmitter<any>();
public onCellClick(data: any): any {
let d = data.row.tDataPoint;
let i = data.row.tICCP;
let s = data.row.tStartDate;
let e = data.row.tEndDate;
let toSend:DataTable = new DataTable(d, i, s, e);
this.row.emit(toSend);
}
HTML для кнопки, которая является дочерним компонентом модальных Bootstrap 4:
<button type="submit" class="btn" data-dismiss="modal" (click)="onClick($event)">Delete</button>
Машинопись для компонента кнопки ребенка:
selector: 'deletebutton'
@Input() receivedRow:DataTable;
onClick(message:DataTable){
this.sender.emit('This is from On Click Deletebutton');
console.log("On Click Deletebutton");
console.log(this.receivedRow);
for (let entry in DPS){
if (DPS[entry].tDataPoint===message.tDataPoint){
DPS.splice(parseInt(entry),1);
}
}
}
HTML компонента кнопки ребенка (это появляется в HTML модала). Это то, что должно фактически получать данные из щелкнутой строки в качестве входных данных.
<deletebutton [receivedRow]='row'></deletebutton>
Прямо сейчас в моем onClick
метод говорит receivedRow
неопределен. Я чувствую, что отсутствует координация между [receivedRow]='row'
, где у меня есть мой код deletebutton
и вызов функции onClick
в HTML для этого дочернего компонента. В общем, я просто хочу щелкнуть строку, нажать кнопку, чтобы открыть удаление Boostrap Modal, и удалить правильную строку. Я нажимаю кнопку Delete
внутри модального. Дайте мне знать, если что-то неясно или требуется больше кода.
Действительно ли существует способ связи между дочерними компонентами, такими как @Input и @Output?
Ваша архитектура непонятна для меня. Возможно, разместите диаграмму или дайте более подробную информацию. – Maxime
Добавлены скриншоты главной страницы и Bootstrap modal на вопрос. HTML-код «ng-table» - это то, что находится в HTML для дочернего компонента. Затем я использую тег 'app-datatable', чтобы разместить этот компонент на главной странице, поскольку' app-datatable' является селектором этого компонента. Первый набор Typcript - это то, как я отправляю информацию о строке через EventEmitter. HTML-кнопка - это HTML для кнопки «Удалить» внутри модуля Bootstrap Modal. Это то, к чему я пытаюсь отправить данные строки. После этого скрипт пытается манипулировать данными строки на основе '@ Input'. – Drew13
Тогда последний HTML-код 'deletebutton' - это HTML, который я использую для фактического отображения кнопки' Delete' в модальном модуле Bootstrap. Позвольте мне, если это прояснит ситуацию или вам понадобится дополнительная информация – Drew13