Javascript 角度材质列表选项返回true,即使返回false
我检查了houndred乘以所有值,它们是正确的 有一些权限,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 设置车辆被
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>