3 回答
TA贡献1853条经验 获得超9个赞
您将 td 隐藏在 cr.id == '0' 上
<td *ngFor="let cr of acl.availableApplicationRoles" [hidden]="cr.id == '0'">
虽然它确实隐藏但它仍然创建 td 元素并且语句将执行,但您会收到以下错误:
[checked]="acl.allowed[pr?.systemName][cr.id]"
因为 cr.id 在这种情况下为 0:
[checked]="acl.allowed[pr?.systemName][0]"
您需要添加条件或将 *ngIf 与容器一起使用。
TA贡献2036条经验 获得超8个赞
您可以使用可选链接,这应该可以解决问题
<!-- notice the ? after acl and cr -->
<td *ngFor="let cr of acl?.availableApplicationRoles" [hidden]="cr?.id == '0'">
基本上发生的事情是角度试图在您的数据返回之前呈现您的列表,因此它不断循环并抛出错误。如果您放置?afteracl角度将跳过*ngFor直到您的数据返回
编辑
您将需要?像这样在所有对 cr 的引用上使用
<tr *ngFor="let pr of acl?.availablePermissions">
<td>
<span>{{pr?.name}}</span>
</td>
<td *ngFor="let cr of acl?.availableApplicationRoles" [hidden]="cr?.id == '0'">
<input
attr.data-role-id="{{cr?.id}}"
attr.data-permission-name="{{pr?.name}}"
attr.data-system-name="{{pr?.systemName}}"
[checked]="acl.allowed[pr?.systemName][cr.id]"
class="allow allow_{{cr?.id}}"
type="checkbox" />
</td>
</tr>
TA贡献1856条经验 获得超17个赞
好的,所以我终于能够使用以下代码使其工作。
<tr *ngFor="let pr of acl.availablePermissions let i = index">
<td scope="col">
<span>{{pr.name}}</span>
</td>
<td *ngFor="let cb of aclPermissions[i].cb">
<input attr.data-role-id="{{cb?.roleId}}"
attr.data-permission-name="{{pr?.permissionName}}"
attr.data-system-name="{{cb?.systemName}}"
class="allow allow_{{cb?.roleId}}"
type="checkbox"
[checked]="cb?.isChecked" />
</td>
如您所见,我正在使用 now 索引,这有助于我循环到对象数组。
添加回答
举报