代码之家  ›  专栏  ›  技术社区  ›  user266909

如何简化模板中的[NGClass]

  •  0
  • user266909  · 技术社区  · 6 年前

    此模板中的[NgClass]太长。有简单的方法吗?谢谢您。

    <ng-container matColumnDef="ThisConsult.Status">
      <th mat-header-cell *matHeaderCellDef mat-sort-header [ngClass]="'headerStyle'">Status</th>
      <td mat-cell *matCellDef="let element">
        <div [ngClass]="{'seahawk': element.ThisConsult.Status==='PENDING', 'blue': element.ThisConsult.Status==='ACTIVE',
                'blackOnWhite': element.ThisConsult.Status==='DISCONTINUED', 'grayOnWhite': element.ThisConsult.Status=='COMPLETE',
                'bloody': element.ThisConsult.Status==='CANCELLED'}">
          {{element.ThisConsult.Status}}
        </div>
      </td>
    </ng-container>
    2 回复  |  直到 6 年前
        1
  •  1
  •   yurzui    6 年前

    您可以简单地使用对象作为字典:

    组件

    class SomeComponent {
      statuses = {
        PENDING: 'seahawk',
        ACTIVE: 'blue',
        DISCONTINUED: 'blackOnWhite',
        COMPLETE: 'grayOnWhite',
        CANCELLED: 'bloody'
      }
      ...
    

    模板语言

    [ngClass]="statuses[element.ThisConsult.Status]"
    
        2
  •  1
  •   KShewengger    6 年前

    您可以在组件上创建一个函数来调用模板,以避免ngclass上的条件列表太长。

    例子:

    用户组件

    @Component({...})
    export class UserComponent {
    
        constructor() {}
    
        assignClassByStatus(element: any): string {
            const classes = [
                { name: 'seahawk', type: 'PENDING' },
                { name: 'blue', type: 'ACTIVE' },
                { name: 'blackOnWhite', type: 'COMPLETE' },
                { name: 'grayOnWhite', type: 'DISCONTINUED' },
                { name: 'bloody', type: 'CANCELLED' },
            ];
    
            const className = classes.find(({ type }) => type === element).name;
    
            return className;
        }
    
    }
    

    用户模板

    ...
    
    <td mat-cell *matCellDef="let element">
       <div [ngClass]="assignClassByStatus(element)">{{element.ThisConsult.Status}}</div>
    </td>