1 回答
TA贡献1799条经验 获得超8个赞
通常在 .html 中使用函数是个坏主意。我想你的permissionCategories 和permissionOfCategory 在表格改变时改变,那你可以在onTablesChanged 中管理。所以你可以使用这个函数来计算一个data对象数组的变量。每个对象都有两个属性:category和permissions(最后一个是一个数组)。所以:
data:any[] //<--declare a variable
onTablesChanged() {
this.allRanks = Array.from(this.db.Tables.Rank.values());
if (this.permissionsOfRank.length <= 0) {
this.permissionsOfRank = Array.from(this.db.Tables.PermissionOfRank.values());
}
//here calculate data in the way
data=this.permissionCategories().map(x=>({category:x,permissions:[]}))
//data is an array ob object with "category" and "permissions"
data.forEach(x=>{
//with each element of data
x.permissions=this.permissionsOfCategory(x.category)
//x.permisions is an array of Permision, but
//you create an object with "permision", the Permision and "selected"
.map(p=>({
permission:p,
selected:this.havePermission(x.category)
})
})
}
还有你的 .html
<mat-selection-list>
<ng-container *ngFor="let cat of data">
<mat-divider></mat-divider>
<!--use cat.category-->
<div mat-subheader>{{ cat.category }}</div>
<!--use cat.permissions-->
<mat-list-option *ngFor="let permission of cat.permissions"
<!--use
[selected]="permission.selected"
>
{{ permission.permission.Name }}
</mat-list-option>
</ng-container>
</mat-selection-list>
我希望不要错过太多(我不检查代码),但请记住:这个想法是一次性计算- 使用 map 将数组转换为对象数组(一个属性是数组,另一个属性是值计算)改为在 .html 中使用复杂函数
添加回答
举报