Angular 9 - 删除 Angular Material Stepper 上的默认图标(创建)

Mat*_*a_B 3 icons material-design angular angular-material-stepper

我在 Angular 中遇到了这个恼人的问题:我通过添加到provides页面的 来覆盖步进器图标:

provide: STEPPER_GLOBAL_OPTIONS, useValue: {displayDefaultIndicatorType: false, showError: true}
Run Code Online (Sandbox Code Playgroud)

这是 HTML 页面(只是一部分,有 7 个元素复制/粘贴):

<mat-horizontal-stepper>

  <!-- AREA -->
  <mat-step label="Step 1" state="area">
    <p>Put down your phones</p>
    <div>
      <button mat-button matStepperNext>Next</button>
    </div>
  </mat-step>

  <!-- QUESTION -->
  <mat-step label="Step 2" state="question">
    <p>Socialize with each other</p>
    <div>
      <button mat-button matStepperPrevious>Back</button>
      <button mat-button matStepperNext>Next</button>
    </div>
  </mat-step>

  <!-- MODE -->
  <mat-step label="Step 3" state="mode">
    <p>Socialize with each other</p>
    <div>
      <button mat-button matStepperPrevious>Back</button>
      <button mat-button matStepperNext>Next</button>
    </div>
  </mat-step>

...

<!-- Icon overrides -->
  <!-- AREA -->
  <ng-template matStepperIcon="area">
    <mat-icon>gavel</mat-icon>
  </ng-template>

  <!-- QUESTION -->
  <ng-template matStepperIcon="question">
    <mat-icon>contact_support</mat-icon>
  </ng-template>

  <!-- MODE -->
  <ng-template matStepperIcon="mode">
    <mat-icon>forum</mat-icon>
  </ng-template>
...
Run Code Online (Sandbox Code Playgroud)

如您所见,这只是您可以在 Angular 9文档中找到的示例

好了,现在我用几张图片来介绍一下这个问题:

第一步,创建图标而不是木槌图标

第二步,情况与第一步相同。 创建图标而不是 contact_support 图标

...当然,还有同样令人讨厌的行为

只要看看圆圈,他们应该有自己的图标(木槌、constact_support、论坛)。但是,当我执行其中一个步骤时,它会将图标替换为另一个图标,准确地说是create icon

现在,如果我回到第二步,在圆圈中生成正确的图标,而不会出现这种烦人的覆盖:

在此输入图像描述

我已经尝试过:

  1. [completed]=false在组件上设置<mat-step>,但它只是删除了前面圆圈中的复选图标
  2. 覆盖图标:
<ng-template matStepperIcon="edit">
  <mat-icon>gavel</mat-icon>
</ng-template>
Run Code Online (Sandbox Code Playgroud)

但它没有用,因为它只是覆盖了图标,所以问题仍然存在。我也尝试留空<mat-icon></mat-icon>,但当然它只是在圆圈中留下了一个空白图标。

我想要实现的是绕过这种“自动覆盖”。任何想法?

ttq*_*750 5

是适合我的解决方案

<mat-horizontal-stepper #stepper>
    <mat-step label="Information">...</mat-step>
    <mat-step label="Groups">...</mat-step>
    <mat-step label="Validate">...</mat-step>
    <ng-template matStepperIcon="number" let-index="index">
        <mat-icon>{{index === 0 ? 'perm_contact_calendar' : index === 1 ? 'group' : 'done'}}</mat-icon>
    </ng-template>
</mat-horizontal-stepper>
Run Code Online (Sandbox Code Playgroud)
@Component({
  selector: 'app-stepper-component',
  templateUrl: './stepper.component.html',
  styleUrls: ['./stepper.component.scss']
})
export class StepperComponent implements AfterViewInit {
  @ViewChild('stepper') stepper: MatHorizontalStepper;
  ngAfterViewInit() {
    this.stepper._getIndicatorType = () => STEP_STATE.NUMBER;
  }
}
Run Code Online (Sandbox Code Playgroud)

或者,覆盖matStepperIcon="number"matStepperIcon="edit"

<mat-horizontal-stepper>
    <mat-step label="Information">...</mat-step>
    <mat-step label="Groups">...</mat-step>
    <mat-step label="Validate">...</mat-step>

    <ng-template matStepperIcon="number" let-index="index">
        <mat-icon>{{index === 0 ? 'perm_contact_calendar' : index === 1 ? 'group' : 'done'}}</mat-icon>
    </ng-template>
    <ng-template matStepperIcon="edit" let-index="index">
        <mat-icon>{{index === 0 ? 'perm_contact_calendar' : index === 1 ? 'group' : 'done'}}</mat-icon>
    </ng-template>
</mat-horizontal-stepper>
Run Code Online (Sandbox Code Playgroud)