Angular Cdk步进器,如何检测何时添加了新步骤
Posted
技术标签:
【中文标题】Angular Cdk步进器,如何检测何时添加了新步骤【英文标题】:Angular Cdk stepper, how to detect when new step added 【发布时间】:2019-10-26 21:38:41 【问题描述】:我有一个基于 Cdk 的自定义步进器,但它是动态的。所以它绑定到一个FormArray。当一个项目被添加到 formArray 时,我需要重定向到最新的步骤。 CdkStepper 似乎不会触发将项目添加到步骤集合的任何事件。
我尝试订阅 FormArray 上的 valueChange,但它在添加新步骤之前触发。
Here is a stackblitz with a setup.
【问题讨论】:
【参考方案1】:CdkStepper 有一个 _steps: QueryList<CdkStep>
属性,该属性有一个 changes: Observable<any>
property 作为添加到 CdkStepper
的新步骤发出的值。
但是,在OnInit
上使用时,_steps
属性似乎尚未填充。因此使用settimeout
等待_steps
初始化的下一个更改检测周期可以解决问题。在您的示例中,将CustomStepperComponent
更改如下:
ngOnInit()
setTimeout(()=>
this._steps.changes.subscribe(x =>
this.selectedIndex = x.length - 1;
);
);
这是我的工作演示
https://stackblitz.com/edit/angular-cdkstepper-formarray-jnftgb
顺便说一句,_steps
属性在"@angular/material": "8.0.0"
中是deprecated
【讨论】:
_steps 在 v7 中被替换为 getter 步骤以更好地封装该字段。所以这个领域不会消失,只是最终可能会被隐藏,你应该开始使用 steps 而不是 _steps 来做同样的事情。应该很容易做出改变。 嗨,ysf 和@Ingó Vals。我知道这个问题已经过时了,但是你们中是否有人为这种自定义步进器提供了有效的 TestBed 设置示例?实现非常顺利,但没有描述测试设置。嘲笑这些步骤似乎是我无法理解的关键部分。如果你们中的一个人有一个示例设置,我很乐意将其作为一个新问题发布,以获得甜蜜的代表增益。 @Berlin_Bro 恐怕我没有这样的 TestBed 设置。但无论如何,请随时将其作为问题发布。以上是关于Angular Cdk步进器,如何检测何时添加了新步骤的主要内容,如果未能解决你的问题,请参考以下文章
如何更改 Angular Material 步进器中的状态图标?
如何设置材料步进器默认打开第二项并设置图标颜色?(Angular Material)
屏幕太小时,Angular Material 步进器标题消失
如何使用模板驱动形式将角度路由与角度材料步进器(https://material.angular.io/components/stepper/overview)结合起来?
Angular Material:如何在 TS 中设置具有不同背景颜色的每个 mat-horizontal-stepper 步进器图标