我正在使用primeng表格单元格编辑。代码如下:
<div class="card">
<p-table [value]="products" dataKey="id" [tableStyle]="{ 'min-width': '50rem' }">
<ng-template pTemplate="header">
<tr>
<th style="width:25%">Code</th>
<th style="width:25%">Name</th>
<th style="width:25%">Inventory Status</th>
<th style="width:25%">Price</th>
</tr>
</ng-template>
<ng-template pTemplate="body" let-product let-editing="editing">
<tr>
<td [pEditableColumn]="product.code" pEditableColumnField="code">
<p-cellEditor>
<ng-template pTemplate="input">
<input pInputText type="text" [(ngModel)]="product.code" />
</ng-template>
<ng-template pTemplate="output">
{{ product.code }}
</ng-template>
</p-cellEditor>
</td>
<td [pEditableColumn]="product.name" pEditableColumnField="name">
<p-cellEditor>
<ng-template pTemplate="input">
<input pInputText type="text" [(ngModel)]="product.name" required />
</ng-template>
<ng-template pTemplate="output">
{{ product.name }}
</ng-template>
</p-cellEditor>
</td>
<td [pEditableColumn]="product.inventoryStatus" pEditableColumnField="inventoryStatus">
<p-cellEditor>
<ng-template pTemplate="input">
<input pInputText [(ngModel)]="product.inventoryStatus" />
</ng-template>
<ng-template pTemplate="output">
{{ product.inventoryStatus }}
</ng-template>
</p-cellEditor>
</td>
<td [pEditableColumn]="product.price" pEditableColumnField="price">
<p-cellEditor>
<ng-template pTemplate="input">
<input pInputText type="text" [(ngModel)]="product.price" />
</ng-template>
<ng-template pTemplate="output">
{{ product.price | currency: 'USD' }}
</ng-template>
</p-cellEditor>
</td>
</tr>
</ng-template>
</p-table>
</div>
TS:
import { ProductService } from '../../service/productservice';
@Component({
selector: 'table-cell-edit-demo',
templateUrl: 'table-cell-edit-demo.html'
})
export class TableCellEditDemo implements OnInit {
products!: Product[];
constructor(private productService: ProductService) {}
ngOnInit() {
this.productService.getProductsMini().then((data) => {
this.products = data;
});
}
}
Stackblitz:
https://stackblitz.com/run?file=src%2Fapp%2Fdemo%2Ftable-cell-edit-demo.html
单元格编辑工作正常。如果任何特定单元格的值从其原始值更改,我想用红色突出显示这些特定单元格和不可编辑模式下的相应标题。我该怎么做?
1条答案
按热度按时间4jb9z9bj1#
要在组件的HTML中对已编辑的单元格进行着色,可以执行以下步骤:
1.将模板引用变量
#rows
添加到<tr>
元素,以使用@ViewChildren
读取行。这将允许您访问组件中的行。1.通过添加
[id]
属性,修改要跟踪编辑的<td>
元素。[id]
属性应设置为属性和rowIndex的组合,例如:[id]="'name'+index"
。1.在表示可编辑字段的
<input>
元素中,添加(ngModelChange)
以侦听输入值的更改。当值更改时,调用一个方法,如colorizeEditedCell(rowIndex, fieldName)
,并将rowIndex
和fieldName
作为参数传递。1.在组件类中添加
@ViewChildren
装饰器,以使用模板引用变量#rows
读取行:1.将
Renderer2
注入到组件的构造函数中,以使用它来操作DOM:1.在组件中定义
colorizeEditedCell
函数,以设置已编辑单元格的背景色。此函数以rowIndex
和fieldName
为参数。上面的代码将遍历指定行的单元格,并检查
col.id
是否与提供的fieldName + rowIndex
匹配。如果找到匹配项,则使用Renderer2
将单元格的背景色设置为#ececec
。注意:确保在组件文件中导入必要的依赖项,如
Renderer2
和ElementRef
。在可编辑表组件中有一个名为
onEditComplete
的事件,您可以通过向<td>
标记添加某些属性来利用它,如文档中所述。下面是一个例子:在上面的例子中,
rowData
对应于我们的例子中的product
,'year'
表示与该列相关联的产品的属性。在我们的示例中,columnsRowIndex
属性设置为index
值。但是,需要注意的是,
onEditComplete
事件仅在输入字段失去焦点(在模糊上)时触发。这意味着如果字段中的数据发生了变化而不触发模糊事件,它不会立即通知您。如果需要实时更新或希望在用户键入时跟踪更改,则需要使用其他机制,如
(ngModelChange)
或(input)
事件,如前面的代码示例所示。可能有其他可用的解决方案,但此方法应能有效满足您的要求。