如何禁用取消选择 TurboTable 组件上的行的选项?
How to disable the option to deselect a row on TurboTable component?
所以我有一个 table,其中包含在整个应用程序使用过程中填充的数据。当用户单击一行时,该行会突出显示并且该行的数据会填充在 table 下方。我只想禁用用户取消选择一行的选项(这是通过再次单击该行来完成的)。
代码:
<p-table #purchaseOrdersList
[value]="purchaseOrders"
selectionMode="single"
[(selection)]="selectedPurchaseOrder"
(onRowSelect)="onRowSelect($event)"
>
<ng-template pTemplate="header">
<tr>
<th class="supplier-number-col">Supplier Number</th>
<th class="supplier-name-col">Supplier Name</th>
<th class="supplier-phone-col">Supplier Phone</th>
</tr>
</ng-template>
<ng-template pTemplate="body" let-purchaseOrder>
<tr [pSelectableRow]="selectedRow">
<td>{{purchaseOrder.supplierNumber}}</td>
<td>{{purchaseOrder.supplierName}}</td>
<td>{{purchaseOrder.supplierPhoneNumber}}</td>
</tr>
</ng-template>
</p-table>
现在可以通过 metaKeySelection 选项解决这个问题。将其设置为 true 将仅在保留元键时允许取消选择行。
<p-table #purchaseOrdersList
[value]="purchaseOrders"
selectionMode="single"
[(selection)]="selectedPurchaseOrder"
(onRowSelect)="onRowSelect($event)" (onRowUnselect) = "onRowUnselect()"
>
<ng-template pTemplate="header">
<tr>
<th class="supplier-number-col">Supplier Number</th>
<th class="supplier-name-col">Supplier Name</th>
<th class="supplier-phone-col">Supplier Phone</th>
</tr>
</ng-template>
<ng-template pTemplate="body" let-purchaseOrder>
<tr [pSelectableRow]="selectedRow">
<td>{{purchaseOrder.supplierNumber}}</td>
<td>{{purchaseOrder.supplierName}}</td>
<td>{{purchaseOrder.supplierPhoneNumber}}</td>
</tr>
</ng-template>
</p-table>
在 .ts 文件中你可以使用 as
onRowUnselect() {
var selectedCount = this.selectedPurchaseOrder.length;
// this.isDeleteShow = (selectedCount >0);
$(".PATotalRowsSelected").html("(" + selectedCount + " selected)");
}
我遇到了完全相同的问题,并提出了两个解决方案:一个非常简单的解决方案和一个稍微复杂的解决方案:
简单的解决方法:
tr.ui-state-highlight {
pointer-events: none;
}
这将防止再次单击任何选定的行,从而防止取消选择。
但是,这也会阻止双击该行。所以如果需要双击,使用下面的解决方法:
稍微复杂一点的解决方案:
将以下属性添加到 p-table:(onRowUnselect)="cancelUnselect($event)"
,然后在您的组件中执行:
private _selectedPurchaseOrder: any;
get selectedPurchaseOrder() {
return this._selectedPurchaseOrder;
}
set selectedPurchaseOrder(value: any) {
if (value) {
this._selectedPurchaseOrder = value;
} else {
this.purchaseOrdersList.selection = this._selectedPurchaseOrder;
}
}
cancelUnselect(event) {
this.purchaseOrdersList.selection = event.data;
}
这将防止在所有情况下取消选择行,并且仍然可以双击。
我正在使用 PrimeNG 9.1 并且必须按如下方式调整 HammerNL 的解决方案以防止行取消选择:
cancelUnselect(event) {
this.purchaseOrdersList.selection = event.data;
this.purchaseOrdersList.selectionChange.emit(event.data);
this.purchaseOrdersList.updateSelectionKeys();
}
如果您使用 table 的“dataKey”属性
,则需要更新选择键
所以我有一个 table,其中包含在整个应用程序使用过程中填充的数据。当用户单击一行时,该行会突出显示并且该行的数据会填充在 table 下方。我只想禁用用户取消选择一行的选项(这是通过再次单击该行来完成的)。
代码:
<p-table #purchaseOrdersList
[value]="purchaseOrders"
selectionMode="single"
[(selection)]="selectedPurchaseOrder"
(onRowSelect)="onRowSelect($event)"
>
<ng-template pTemplate="header">
<tr>
<th class="supplier-number-col">Supplier Number</th>
<th class="supplier-name-col">Supplier Name</th>
<th class="supplier-phone-col">Supplier Phone</th>
</tr>
</ng-template>
<ng-template pTemplate="body" let-purchaseOrder>
<tr [pSelectableRow]="selectedRow">
<td>{{purchaseOrder.supplierNumber}}</td>
<td>{{purchaseOrder.supplierName}}</td>
<td>{{purchaseOrder.supplierPhoneNumber}}</td>
</tr>
</ng-template>
</p-table>
现在可以通过 metaKeySelection 选项解决这个问题。将其设置为 true 将仅在保留元键时允许取消选择行。
<p-table #purchaseOrdersList
[value]="purchaseOrders"
selectionMode="single"
[(selection)]="selectedPurchaseOrder"
(onRowSelect)="onRowSelect($event)" (onRowUnselect) = "onRowUnselect()"
>
<ng-template pTemplate="header">
<tr>
<th class="supplier-number-col">Supplier Number</th>
<th class="supplier-name-col">Supplier Name</th>
<th class="supplier-phone-col">Supplier Phone</th>
</tr>
</ng-template>
<ng-template pTemplate="body" let-purchaseOrder>
<tr [pSelectableRow]="selectedRow">
<td>{{purchaseOrder.supplierNumber}}</td>
<td>{{purchaseOrder.supplierName}}</td>
<td>{{purchaseOrder.supplierPhoneNumber}}</td>
</tr>
</ng-template>
</p-table>
在 .ts 文件中你可以使用 as
onRowUnselect() {
var selectedCount = this.selectedPurchaseOrder.length;
// this.isDeleteShow = (selectedCount >0);
$(".PATotalRowsSelected").html("(" + selectedCount + " selected)");
}
我遇到了完全相同的问题,并提出了两个解决方案:一个非常简单的解决方案和一个稍微复杂的解决方案:
简单的解决方法:
tr.ui-state-highlight {
pointer-events: none;
}
这将防止再次单击任何选定的行,从而防止取消选择。
但是,这也会阻止双击该行。所以如果需要双击,使用下面的解决方法:
稍微复杂一点的解决方案:
将以下属性添加到 p-table:(onRowUnselect)="cancelUnselect($event)"
,然后在您的组件中执行:
private _selectedPurchaseOrder: any;
get selectedPurchaseOrder() {
return this._selectedPurchaseOrder;
}
set selectedPurchaseOrder(value: any) {
if (value) {
this._selectedPurchaseOrder = value;
} else {
this.purchaseOrdersList.selection = this._selectedPurchaseOrder;
}
}
cancelUnselect(event) {
this.purchaseOrdersList.selection = event.data;
}
这将防止在所有情况下取消选择行,并且仍然可以双击。
我正在使用 PrimeNG 9.1 并且必须按如下方式调整 HammerNL 的解决方案以防止行取消选择:
cancelUnselect(event) {
this.purchaseOrdersList.selection = event.data;
this.purchaseOrdersList.selectionChange.emit(event.data);
this.purchaseOrdersList.updateSelectionKeys();
}
如果您使用 table 的“dataKey”属性
,则需要更新选择键