【问题标题】:Using Mat-icons and Mat-content with *ngif - angular 12使用带有 *ngif 的 Mat-icons 和 Mat-content - angular 12
【发布时间】:2021-08-22 22:21:15
【问题描述】:

在一个角度模板中,我正在尝试创建一个表格,并在特定列中,根据数据,我想显示一个垫子图标或简单地写“N/A”

我有 3 个选项 -

  • 如果不适用,则显示“N/A”
  • 如果考试有效,请显示<mat-icon>
  • 如果考试无效则显示<mat-icon>

我刚才在我的代码中引入了“N/A”位。早些时候,我只有两个 <mat-icon> 选项,我的代码运行良好。

现在,当我尝试打开我的 HTML 时,它永远不会显示考试 D 和考试 E 的 <mat-icon>。该列是空白的。 它只显示其他 3 项考试的“N/A”。

谁能帮助我,让我知道我错过了什么或我做错了什么。

我有如下所示的 JSON 数据。

[
{"valid":"Not Applicable","validityDate":"","name":"Exam A"},
{"valid":"Not Applicable","validityDate":"","name":"Exam B"},
{"valid":"Not Applicable","validityDate":"","name":"Exam C"},
{"valid":"Yes","validityDate":"23-01-2022","name":"Exam D"}, 
{"valid":"No","validityDate":"23-01-2017","name":"Exam E"}
]

我正在尝试在表格中显示它。我的角度模板如下 -

我的 component.ts,我在其中读取 JSON 响应并将其添加到对象中,有这样的东西 -

    const EXAM_DATA: Array<TrainingElement> = [
  { title: this.userExamJson[0].name, status: this.userExamJson[0].valid, date: this.userExamJson[0].validityDate },
  { title: this.userExamJson[1].name, status: this.userExamJson[1].valid, date: this.userExamJson[1].validityDate },
  { title: this.userExamJson[2].name, status: this.userExamJson[2].valid, date: this.userExamJson[2].validityDate },
  { title: this.userExamJson[3].name, status: this.userExamJson[3].valid, date: this.userExamJson[3].validityDate },
  { title: this.userExamJson[4].name, status: this.userExamJson[4].valid, date: this.userExamJson[4].validityDate },
];

this.dataSource = EXAM_DATA;

我的 HTML 模板如下所示 -

   <table mat-table [dataSource]="dataSource" class="mat-elevation-z8">

      <!--- Note that these columns can be defined in any order.
              The actual rendered columns are set as a property on the row definition" -->
      <ng-container matColumnDef="title">
        <th mat-header-cell *matHeaderCellDef> Exam Title </th>
        <td mat-cell *matCellDef="let element"> {{element.title}} </td>
      </ng-container>

      <ng-container matColumnDef="status">
        <th mat-header-cell *matHeaderCellDef> Status </th>
        <td mat-cell *matCellDef="let element">
          <mat-icon *ngIf="element.status == 'Yes'" [ngStyle]="{'color':'green'}" matTooltipPosition="right"
            matTooltipClass="mattooltip" matTooltip={{element.date}}>done_outline</mat-icon>
          <mat-icon *ngIf="element.status == 'No'" [ngStyle]="{'color':'orange'}" matTooltipPosition="right"
            matTooltipClass="mattooltip" matTooltip={{element.date}}>report_problem</mat-icon>
          <mat-content *ngIf="element.status == 'Not Applicable'">N/A</mat-content>
        </td>
      </ng-container>

      <tr mat-header-row *matHeaderRowDef="showColumns"></tr>
      <tr mat-row *matRowDef="let row; columns: showColumns;"></tr>
    </table>

【问题讨论】:

  • 角材质中没有mat-content,可能你指的是mat-card-content。请同时检查控制台中的错误?
  • 您好,是的。我指的是 mat-card-content 或任何文本。遗憾的是,控制台中没有错误。我已经检查过了。
  • 您的代码看起来不错,能否请您创建一个可重现的堆栈闪电战。
  • 嗨萨米尔,感谢您的回复。 jsngian 的答案对我有用。

标签: angular angular-material angular9 angular-template mat-icon


【解决方案1】:

试试这个,

正确检查您的 mattooltip css 类。

      <ng-container matColumnDef="status">
        <th mat-header-cell *matHeaderCellDef> Status </th>
        <td mat-cell *matCellDef="let element">
   
          <span *ngIf="element.status === 'Not Applicable'; else showStatusIcons">N/A</span>

          <ng-template #showStatusIcons>
            <div matTooltipPosition="right" matTooltipClass="mattooltip" matTooltip={{element.date}}>
              <mat-icon [ngStyle]="{'color': element.status === 'Yes' ? 'green' : 'orange'}">{{ element.status === 'Yes' ? 'done_outline' : 'report_problem' }}</mat-icon>
            </div>
          </ng-template>
        </td>
      </ng-container>

【讨论】:

  • 谢谢你。这对我有用。基本上,我认为将每个 ngif 放在另一个下方是行不通的。但这真的很好用。 :)
  • 谢谢。你能接受它作为答案吗? :)
猜你喜欢
  • 2019-11-25
  • 2022-12-22
  • 2020-11-04
  • 2023-01-19
  • 2018-12-20
  • 2020-04-11
  • 2020-04-09
  • 2019-02-19
  • 2020-06-19
相关资源
最近更新 更多