子组件在初始化之前等待父组件ngOnInit异步操作

时间:2018-08-12 08:45:58

标签: javascript angular rxjs mat-stepper

我正在使用mat-stepper来实现客户入职流程。 所有5个单独的child mat-stepper component都属于一个parent组件。

<parent-html>
   <mat-horizontal-stepper #ccStepper [linear]="isLinear">
     <mat-step [stepControl]="childAForm">
       <child-a></child-a>
     </mat-step>
   </mat-horizontal-stepper>

 <mat-horizontal-stepper #ccStepper [linear]="isLinear">
     <mat-step [stepControl]="childBForm">
       <child-b></child-b>
     </mat-step>
   </mat-horizontal-stepper>
//3 more child components
</parent-html>

我必须为每个子组件save and proceed个数据。 applicationID是在save and proceed个组件的first child和我的secondthirdfourth子组件必须保留在{{1 }}基于first的组件。

为了进一步使事情复杂化,每当用户保存信息时,都必须将其存储为applicationID,并生成draft(完全不同的路径)。然后,用户可以单击applicationID,并且必须提取所有相同的信息,然后可以编辑上一个和下一个组件的信息。

对于正常的保存和继续,我将applicationID存储在applicationID中,并在所有子组件中获取所有信息。

即使我在同级组件中有可用信息,它也会触发多个调用吗,这是正确的方法吗?

对于编辑方案,我通过behaviour subject将客户信息传递给所有子组件。这里的问题是在@Input child解决了ngOnInit值之前就触发了parent ngOnInit。因此总是无法通过条件检查。

解决该问题的最佳方法是什么?谢谢您的宝贵时间!!

1 个答案:

答案 0 :(得分:0)

对于“编辑方案”,如果使用@Input装饰器将值从“父级”传递给“子级”组件。您可以使用子组件中的ngOnChanges()方法访问这些值。

子组件:

ngOnChanges(changes: SimpleChanges) {
    if(this.inputData){}
}

对于Application ID,您可以在单例服务中设置应用程序ID,并且可以通过注入服务在子组件中访问该应用程序ID。