Angular 2-редактирование строк таблицы inline, а затем сохранение новых данных

Я пытаюсь сделать компонент, который показывает данные в строках из модели TableData,

export class TableData{
    constructor(
        public id: number,
        public country: string,
        public capital: string){ }
}

у меня есть мои данные в компоненте, как это,

tableData: TableData[] = [
        new TableData(1, 'Canada','Ottawa'),
        new TableData(2, 'USA','Washington DC'),
        new TableData(3, 'Australia','Canberra'),
        new TableData(4, 'UK','London')
        ];

затем в моем компоненте я создаю таблицу, подобную этой,

<table>
  <tbody>
     <tr *ngFor="#row of tableData>
        <td contenteditable='true'>{{ row.id }}</td>
        <td contenteditable='true' (click)="onRowClick($event)">{{ row.country }}</td>
        <td contenteditable='true'>{{ row.capital }}</td>
     </tr>
 </tbody>
<span>{{ tableData | json }}</span>
</table>

onRowClick(event){
console.log(event);
}

Я могу редактировать данные, как я пометил <td> элемент как contenteditable, но не знаю, как сохранить его или получить обновленные значения. Я проверил данные "события", переданные методу onRowClick, но не смог получить "id" строки (она пуста. событие.srcElement.id или событие.цель.id оба пустые).

короче говоря, я хочу отредактировать таблицу и посмотреть, как она обновляет переменную tableData. Прости, что не спросил ясно в первый раз.

любое руководство о том, как решить мою проблему, очень ценится!

2 ответов


Juts pass id как флаг вместе с вашим идентификатором затем обнаружить в соответствии с идентификатором нажал на строку таблицы вот пример -

tableData: TableData[] = [
        new TableData('Canada','Ottawa',1),
        new TableData('USA','Washington DC',2),
        new TableData('Australia','Canberra',3),
        new TableData('UK','London',4)
        ];
  • PS-ваш код бросает ошибку здесь, пожалуйста, исправьте здесь.

    <tr *ngFor="#row of tableData>

следует изменить на

<tr *ngFor="#row of tableData">

рабочая демо здесь пример Plunker

обновление - Попробуйте использовать (input) привязка события к td и вам обновленный текст с помощью event.target.outerText . пожалуйста, проверьте обновление plnukr.

<tr *ngFor="#row of tableData">
  <td contenteditable='true' (input)="onRowClick($event, row.id)">{{ row.country }}</td>
  <td contenteditable='true'>{{ row.capital }}</td>
</tr>

onRowClick(event, id){
    console.log(event.target.outerText, id);
  }

Я искал ответ на тот же вопрос. Сначала я добрался сюда. Позже я нашел потрясающую статью с ответом, который вы искали.

Обновлено: у меня есть udpated plunk, а также директивный код для последней версии angular