css - 从 Angular Material 的下拉列表中为每个选项显示不同颜色的内容详细信息

标签 css angular typescript angular-material

我想在用户选择一个选项时用不同的颜色显示内容。例如在下拉列表中,元素有三个选项。如果用户在状态占位符中选择已确认,内容将以绿色显示“已确认”,当用户选择未确认时,该元素将以红色显示“未确认”字样。如果用户选择“已确认并已发货”,颜色将显示为黄色。我如何让它工作?我是 Angular 的新手。我已经尝试了很多方法,但它不起作用。

<mat-form-field>
  <mat-select placeholder="Status" [formControl]="statusTypeFilter">
    <mat-option value="1">Confirmed</mat-option>
    <mat-option value="2">Not Confirmed</mat-option>
    <mat-option value="3">Confirmed and Shipped</mat-option>
</mat-form-field>


<div class="table-container mat-elevation-z8">
  <table mat-table [dataSource]="ItemConfirmationList" multiTemplateDataRows matSort matSortActive="no">
    <ng-container matColumnDef="StatusName">
      <th mat-header-cell *matHeaderCellDef mat-sort- header>Status</th>
      <td mat-cell *matCellDef="let element">{{element.StatusName }}</td>
    </ng-container>
</div>

最佳答案

我做过的几件事:

  • 我们将从下拉列表中选择的值存储在一个变量中
  • 对于我们表中的每一行,我们检查了这个变量的状态,并在 匹配的情况下,我们设置适当的类

适当的html:

<mat-form-field>
    <mat-label>Status</mat-label>
    <mat-select [(value)]="selected">
        <mat-option *ngFor="let food of foods" [value]="food.value">
            {{food.viewValue}}
        </mat-option>
    </mat-select>
</mat-form-field>
<!-- <p>You selected: {{selected}}</p> -->
<hr/>
    <table>
        <thead>
            <tr>
                <td> Item </td>
                <td> Status </td>
            </tr>
        </thead>
        <tbody>
            <ng-container *ngFor='let pickedItem of sampleItems; let idx = index'>
                <tr [ngClass]="setColor(pickedItem.status, idx)">
                    <td> {{pickedItem.item}}</td>
                    <td>
                        <span *ngIf='pickedItem.status == 1'> Confirmed </span>
            <span *ngIf='pickedItem.status == 2'> Not Confirmed </span>
            <span *ngIf='pickedItem.status == 3'> Confirmed and Shipped </span>
                    </td>
                </tr>
            </ng-container>
        </tbody>
    </table>

适当的ts:

setColor(statusVal, idx){
  let returnedClass:string ='defaultClass';
  (statusVal == this.selected && statusVal ===1) ? returnedClass = 'confirmedClass' : 'defaultClass';
  (statusVal == this.selected && statusVal ===2) ? returnedClass = 'notConfirmedClass' : 'defaultClass';
  (statusVal == this.selected && statusVal ===3) ? returnedClass = 'shippedClass' : 'defaultClass';
  return returnedClass;
}

适当的css:

.confirmedClass { color:green;}
.notConfirmedClass { color:red;}
.shippedClass { color:orange;}
.defaultClass { color:#000;}

完成working stackblitz here

关于css - 从 Angular Material 的下拉列表中为每个选项显示不同颜色的内容详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56370376/

相关文章:

node.js - 无法让 TypeScript 监视我的项目和 nodemon 重新加载它

java - Angular 2 : download file from Rest webservice

Javascript 对象属性名称

html - 从哪里开始过滤用户的输入以给出结果

jquery - 工具提示的 CSS 定位在模式弹出窗口内中断

html - 输入框不是全宽

javascript - 使 QuillJS 编辑器高度 100%

angular - Angular CLI 的 Webpack 构建失败 - 意外的 token

javascript - 多个 Angular2 应用程序,单一 vendor 存储库

angular - 如何制作只有 ng-container 的 if-else Angular 模板?