You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中*ngIf判断对象属性失效问题求助

Angular *ngIf 不生效问题排查与解决

问题根源1:属性名大小写不匹配

JavaScript/TypeScript 是大小写敏感语言,你在 HTML 中写的是 !row.widgetAccess.isvalid(小写v),但 TypeScript 代码里定义的属性是 isValid(大写V),这直接导致模板无法正确读取属性值,*ngIf 判断逻辑失效。

问题根源2:TypeScript 逻辑错误

在 TS 代码的 filter 回调里,你用了赋值运算符 = 而非比较运算符 ===:

widget.widgets.filter(wA => wA.isValid = false)

这行代码会把所有 wA.isValid 强制设为 false,而不是筛选出原本就无效的项,后续的 widget.isValid = false 逻辑也因此出错。


修复方案

1. 修正 HTML 中的属性名

把模板里的 isvalid 改为 isValid:

<div class="tw-w-3 tw-float-right -tw-mt-3" *ngIf="!row.widgetAccess.isValid">
  <mat-icon svgIcon="alerts_outlined" class="tw-max-w-3" aria-hidden="true">
  </mat-icon>
</div>

2. 修正 TypeScript 中的逻辑错误

将赋值运算符改为严格比较,同时用更高效的 some 方法替代 filter(只需判断是否存在无效项,无需生成新数组):

makeRowData(): void {
  this.rowData = [];
  this.dynamicGroups.forEach(group => {
    this.rowData.push({
      dynamicGroup: group,
      widgetAccess: {
        dynamicGroupUID: group.uId,
        hasAccess: false,
        widgets: [],
        isValid: true,
      } as WidgetAccess
    });
  });

  this.dashboardConfiguration.widgets?.forEach(widget => {
    this.rowData.forEach(widgetGroup => {
      if (widgetGroup.dynamicGroup.uId === widget.dynamicGroupUID) {
        widgetGroup.widgetAccess = widget;
      }
      // 修正比较运算符,并用some提升性能
      if (widget.widgets.some(wA => wA.isValid === false)) {
        widget.isValid = false;
      };
    });
  });
}

内容的提问来源于stack exchange,提问作者Azi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:30:38