angular - PrimeNG 基于对象数组的预选复选框
问题描述
我有复选框矩阵,它基于数组呈现行,基于数组呈现Permissions
列Clients
。由于数据库中的映射表作为第三个数组对象出现,因此我将其推入BehaviorSubject<PermissionClient>
并为每个对象绑定它,checkbox
因此ngModel
它将预先检查它们。对于value
复选框,我绑定了一个自定义对象
<ng-template pTemplate="body" let-permission>
<tr>
<td>
{{ permission.permissionName }}
</td>
<td *ngFor="let client of SelectedClients" class="align-center">
<p-checkbox [value]="{ clientId: client.clientId, permissionId: permission.permissionId }" [(ngModel)]="SelectedRows" (onChange)="onCheckboxChange($event, permission.permissionId, client.clientId)"></p-checkbox>
</td>
</tr>
</ng-template>
所以最终它会映射两者Id
并预先检查它们,但它不起作用。我怎样才能做到这一点?
权限客户端接口
export interface PermissionClients {
clientId: string;
permissionId: string;
}
以及带有相关 get/set 的 BehaviorSubject
private selectedData: BehaviorSubject<PermissionClients[]> = new BehaviorSubject([]);
get SelectedRows(): any[] {
return this.selectedData.getValue();
}
set SelectedRows(val) {
this.selectedData.next(val);
}
当我console.log
检查复选框后SelectedRows
,数组中正好有 2 个相同的对象,一个来自 db,1 个在检查后。
解决方案
反正我发现了问题。发布如果有人有同样的问题。问题是因为它们是完全相同的对象,所以它们的引用不是(我傻了)。通过为我的目的创建扩展CheckboxComponent
和覆盖isChecked()
方法来修复它。现在一切正常。
推荐阅读
- c# - 使用 Math.Round 函数在 C# 中的 Excel 工作表中将输入的数字转换为只有 2 个小数
- mysql - MySQL 显示第 n 个日期
- php - 如何使用 postman 为 web 服务设置 .php 文件的 url 和参数?
- bootstrap-4 - 为什么主容器在 nav 后面?
- entity-framework - 可以根据实体框架中的类型列将表拆分为多个实体吗?
- php - Opencart 迁移问题
- apiblueprint - 文本格式的 Dredd Api 蓝图
- android - 如何在画布上绘制 SVG?
- java - 如何将输出 xmi/cas 传递给 UIMA Ruta 引擎?
- odoo - Odoo 9 如何将自定义视图模板附加到现有视图中?