【发布时间】:2020-07-01 18:15:53
【问题描述】:
<mat-selection-list>
<ng-container *ngFor="let cat of permissionCategories()">
<mat-divider></mat-divider>
<div mat-subheader>{{ cat }}</div>
<mat-list-option *ngFor="let permission of permissionsOfCategory(cat)"
[selected]="havePermission(permission)"
>
{{ permission.Name }}
</mat-list-option>
</ng-container>
</mat-selection-list>
和
havePermission(permission: Permission): boolean {
return this.currentRankPermissions.includes(permission.Id);
}
我检查了百次所有值,它们是正确的
有一些权限和havePermission 返回真假
UseLspdTablet 真
ModifyRanks 真
AccessCitizenIndex 真
AccessCitizenRegistry 假
ArrestMandateCitizen 错误
ChangeCitizenPhoneNumber false
修改CitizenWanted false
ShowCitizenCrimeCount 错误
AccessVehicleIndex 假
SetVehicleAsStolen 假
SetVehicleAsWanted 假
SetVehicleAsFound 假
SetVehicleNote false
每次我运行此页面时,一切正常,但我等待 3 秒(在此之后,同一页面上还有一些其他更新,他们都没有访问任何这些变量或其他东西),然后在控制台中它们仍然显示正常,但在页面中它们都被选中,WHY
我还注意到有 thounds of this = thounds of rerenders 的控制台日志。
其余可能很重要的代码:
onTablesChanged() {
this.allRanks = Array.from(this.db.Tables.Rank.values());
if (this.permissionsOfRank.length <= 0) {
this.permissionsOfRank = Array.from(this.db.Tables.PermissionOfRank.values());
}
}
permissionCategories(): string[] {
const res = [];
Array.from(this.db.Tables.Permission.values()).forEach((permission: Permission) => {
if (!res.includes(permission.Category)) {
res.push(permission.Category);
}
});
return res;
}
permissionsOfCategory(cat: string): Permission[] {
return Array.from(this.db.Tables.Permission.values())
.filter(c => c.Category === cat);
}
每 3 秒调用一次 onTablesChanged 会导致此重新渲染,但它应该会导致 13 次 havePermission 调用,但它会导致 99999999 个调用,为什么
Windows 10 角 8.3.26 打字稿 3.5.3 @角/材料8.2.3
我在 FiveM 应用程序 (GTA V) 上运行了这个 - 它只使用了铬。
为什么
【问题讨论】:
-
你在哪里打电话给
onTablesChanged?
标签: javascript angular typescript angular-material logic