PrimeNG表:以编程方式处理行编辑(pSaveEditableRow)



我使用的是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

对于那些想要手动结束行编辑模式的人,我找到了一个解决方案:

  1. button标记中删除pSaveEditableRow(如果已添加(。正如文档所述,pSaveEditableRow只是将行切换回视图模式。

  2. #htmlTableRowElement添加到您的<tr>标签:<tr [pEditableRow]="rowData" #htmlTableRowElement>...</tr>

  3. rowDatahtmlTableRowElement传入button标签上的(click)函数。

  4. import { Table } from 'primeng/table'添加到组件中。

  5. @ViewChild('dt', { static: false }) table: Table添加到组件中。

  6. #dt添加到您的<p-table>:<p-table #dt>...</p-table>

  7. 现在,您可以在单击按钮时调用的函数中调用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个选项之间,你应该能够完成你需要的任何事情。根据你的要求,当用户点击复选标记按钮进行保存时,你会执行验证逻辑,然后继续保存,或者通知用户行中的一到多个字段不正确。

最新更新