我使用的是PrimeNG表,如果有任何自定义验证错误需要在编辑模式下提前解决,我想以编程方式处理保存行编辑。目前,我已将pSaveEditableRow添加到一个按钮中,单击该按钮后,将结束行编辑并保存对该行所做的编辑。我需要覆盖它,并事先进行一些验证。如何才能做到这一点?
我已经查看了PrimeNG的文档,看起来我可以调用"saveRowEdit"函数,但我需要传递rowData和rowElement,这两个函数都来自pEditableRow,并且pEditableRow似乎被设置为具有表所需属性的对象。
参考文献:https://github.com/primefaces/primeng/blob/b3e7b3582f98936e0cddcafc921c61a9eabf9bcd/src/app/components/table/table.ts#L1883
https://github.com/primefaces/primeng/blob/b3e7b3582f98936e0cddcafc921c61a9eabf9bcd/src/app/components/table/table.ts#L3807
对于那些想要手动结束行编辑模式的人,我找到了一个解决方案:
-
从
button
标记中删除pSaveEditableRow
(如果已添加(。正如文档所述,pSaveEditableRow
只是将行切换回视图模式。 -
将
#htmlTableRowElement
添加到您的<tr>
标签:<tr [pEditableRow]="rowData" #htmlTableRowElement>...</tr>
-
将
rowData
和htmlTableRowElement
传入button
标签上的(click)
函数。 -
将
import { Table } from 'primeng/table'
添加到组件中。 -
将
@ViewChild('dt', { static: false }) table: Table
添加到组件中。 -
将
#dt
添加到您的<p-table>
:<p-table #dt>...</p-table>
-
现在,您可以在单击按钮时调用的函数中调用
this.table.saveRowEdit(rowData, htmlTableRowElement)
。这将结束该行的编辑模式,并将其置于视图模式。rowData
是任意类型(一个包含行数据的对象(,htmlTableRowElement
非常不言自明。
希望这能有所帮助!
在第二个例子中,您注意到有3个按钮,每个按钮都绑定到不同的函数:
<button *ngIf="!editing" pButton pRipple type="button" pInitEditableRow icon="pi pi-pencil" (click)="onRowEditInit(product)" class="p-button-rounded p-button-text"></button>
<button *ngIf="editing" pButton pRipple type="button" pSaveEditableRow icon="pi pi-check" (click)="onRowEditSave(product)" class="p-button-rounded p-button-text p-button-success mr-2"></button>
<button *ngIf="editing" pButton pRipple type="button" pCancelEditableRow icon="pi pi-times" (click)="onRowEditCancel(product, ri)" class="p-button-rounded p-button-text p-button-danger"></button>
在我看来,在这3个选项之间,你应该能够完成你需要的任何事情。根据你的要求,当用户点击复选标记按钮进行保存时,你会执行验证逻辑,然后继续保存,或者通知用户行中的一到多个字段不正确。