Мне нужно динамически генерировать источник данных для моей таблицы PrimeNG, потому что я не знаю, сколько столбцов у меня будет или даже каким будет заголовок для каждого столбца. Мне нужно, чтобы таблица была редактируемой с двусторонней привязкой данных. Я пытаюсь использовать двумерный массив для хранения данных (gridData: number[][]) и динамически создавать список столбцов как {index: 0, header: "col1"} и т. д. Отображается сетка правильно с правильными начальными значениями, но изменения не записываются обратно в сетку. В документации PrimeNG указано, что директива [editablecolumnfield] для элемента должна называть «поле», но эти записи не имеют имен полей, только индексы, потому что таблица данных не является массивом объектов с членами, а массивом массивов с индексы. Возможно ли вообще двустороннее связывание данных с двумерным массивом?
Я новичок в разработке Angular и PrimeNG, поэтому, если я все делаю неправильно, пожалуйста, укажите мне правильное направление.
<p-table [columns] = "gridCols" [value] = "gridData">
<ng-template pTemplate = "header" let-gridCols>
<tr>
<th *ngFor = "let col of gridCols">
{{col.header}}
</th>
</tr>
</ng-template>
<ng-template pTemplate = "body" let-gridRow let-columns = "gridCols">
<tr>
<td *ngFor = "let col of gridCols" [pEditableColumn] = "gridRow" [pEditableColumnField] = "col.index">
<p-cellEditor>
<ng-template pTemplate = "input">
<input type = "number" ([ngModel]) = "gridRow[col.index]" />
</ng-template>
<ng-template pTemplate = "output">
{{gridRow[col.index]}}
</ng-template>
</p-cellEditor>
</td>>
</tr>
</ng-template>
</p-table>
Это одна из тех зловещих ошибок в деталях... вы неправильно расставили скобки для двусторонней привязки данных в поле ввода. []-Квадратные скобки, кажется, должны быть внешними скобками вокруг ngModel
.
Ваш:
<input type = "number" ([ngModel]) = "gridRow[col.index]" />
Правильный:
<input type = "number" [(ngModel)] = "gridRow[col.index]" />
Кроме того, двусторонняя привязка данных отлично работает для двумерного массива.
Спасибо! Я отказался от получения ответа на этот вопрос. Я попробую, и если это решит мою проблему, я отмечу это как ответ.