Javascript 角度材质列表选项返回true,即使返回false

Javascript 角度材质列表选项返回true,即使返回false,javascript,angular,typescript,angular-material,logic,Javascript,Angular,Typescript,Angular Material,Logic,我检查了houndred乘以所有值,它们是正确的 有一些权限,havePermission返回值true或false 使用PDTablettrue 修改等级true AccessCitizenIndextrue AccessCitizenRegistryfalse 逮捕公民假 ChangeCitizenPhoneNumberfalse ModifyCitizenWastedfalse ShowCitizenCrimeCountfalse AccessVehicleIndexfalse 设置车辆被

我检查了houndred乘以所有值,它们是正确的 有一些权限,
havePermission
返回值true或false

使用PDTablettrue
修改等级true
AccessCitizenIndextrue
AccessCitizenRegistryfalse
逮捕公民
ChangeCitizenPhoneNumberfalse
ModifyCitizenWastedfalse
ShowCitizenCrimeCountfalse
AccessVehicleIndexfalse
设置车辆被盗
设置默认值为false
SetVehicleFound错误
设置车辆说明错误

每次我运行这个页面时,一切都很正常,但我等了3秒钟(在这之后,在同一页面上有一些其他更新,他们都没有访问任何变量或其他东西),然后在控制台中他们仍然显示ok,但在页面中他们都被选中,为什么

此外,我还注意到,有数千个控制台日志的这=千个重渲染器

其他可能很重要的代码:

havePermission(permission: Permission): boolean {
    return this.currentRankPermissions.includes(permission.Id);
}
onTablesChanged(){
this.allRanks=Array.from(this.db.Tables.Rank.values());
如果(此为.permissionsOfRank.length{
如果(!res.includes(permission.Category)){
res.push(permission.Category);
}
});
返回res;
}
permissionsOfCategory(类别:字符串):权限[]{
返回Array.from(this.db.Tables.Permission.values())
.过滤器(c=>c.类别===cat);
}
每3秒调用一次
onTablesChanged
,这会导致此重新加载,但它会导致13次调用
havePermission
,但会导致其中9999999次,为什么

视窗10 角度8.3.26 打字稿3.5.3 @角度/材料8.2.3

我在FiveM应用程序(GTAV)上运行了这个程序——它只使用铬


为什么

通常在.html中使用函数是个坏主意。我想当表格更改时,您的permissionCategories和permissionsOfCategory也会更改,也就是说,您可以在onTablesChanged中使用mannage。因此,您可以使用此函数计算一个变量
data
,该变量是一个对象数组。每个对象都有两个属性:
类别
权限
(最后一个是数组)。因此:

数据:任意[]//{
//使用每个数据元素
x、 权限=此.permissionsOfCategory(x.category)
//x、 权限是权限的数组,但
//使用“权限”、权限和“选定”创建对象
.map(p=>({
许可:p,
选中:此.havePermission(x.category)
})
})
}
还有你的.html

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)
          })
    })
  }

{{cat.category}}

您在哪里呼叫
onTablesChanged
  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);
  }
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)
          })
    })
  }
<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>