我如何通过 angular 中的打字稿访问 MatStep 中的组件

How i can access components in a MatStep by typescript in angular

我需要在打字稿中访问步进器步骤中的所有组件,我有以下内容:

<mat-vertical-stepper #stepper (selectionChange)="ChangeSelection($event)">
  <mat-step label="Step 1">
    Step 1
  </mat-step>
  <mat-step label="Step 2">
    Step 2
    <app-comp1>  </app-comp1>
    <app-comp2>  </app-comp1>
  </mat-step>
</mat-vertical-stepper>  

知道 comp1comp2 实现 IComp(自定义接口)

export interface IComp {
  MethodeFromInterface?: { (data?: any): void }; //this is optional
}

export class Comp1 implements IComp {
  MethodeFromInterface(data: any) {
    //do something here
  }
}

export class Comp2 implements IComp {
  MethodeFromInterface(data: any) {
    //do something here
  }
}

主要成分有

ChangeSelection(event) {
  var m = (<IComp>event.selectedStep);
  if (m.MethodeFromInterface.InnerComponents[0]) // InnerComponents is an example  
    m.MethodeFromInterface("TEST");     
}

那么 MatStep 里面有没有类似 innerComponents 的东西?

根据您的评论,听起来您想根据上一步动态更改步进器内容。为此,我会使用 event-based 方法,而不是命令式方法。

一种解决方案是将步骤组件中的事件发送到 parent 组件中。然后让 parent 呈现适当的更改。

Parent HTML

<mat-vertical-stepper #stepper (selectionChange)="ChangeSelection($event)">
  <mat-step label="Step 1">
    Step 1
    <app-comp0 (stateChanged)="step1State.next($event)">  </app-comp0>
  </mat-step>
  <mat-step label="Step 2">
    Step 2
    <app-comp1 [step1State]="step1State | async">  </app-comp1>
    <app-comp2 [step1State]="step1State | async">  </app-comp1>
  </mat-step>
</mat-vertical-stepper>  

Parent打字稿

step1State = new EventEmitter();

Child 打字稿 app-comp0

@Output()
stateChanged = new EventEmitter();

Child 打字稿 app-comp1

@Input()
set step1State(newState) {
  // Do work here
}

现在 Step 2 组件依赖于 Step 1 组件的状态。您可以继续这样做,根据每个组件的许多 @Input@Output 链接不同的组件。

这也使得推理更容易,因为每个组件仅依赖于给定的事件,而不是直接依赖。