(如果这是重复的,请告诉我。我找到了类似的线程,但无法找到答案的解决方案。)
我有一个调用其子级(模态#1)的组件,而后者又可以调用另一个模态(模态#2)。模式1只是一种标准形式。如果其中一个字段缺少用户想要的选项,则可以触发模式2添加它。
我想知道的是,如何将数据从模式#2传递到#1,以便我可以通知#1已添加了新元素,并且应该在相应的表单字段中将其用作默认值? / p>
答案 0 :(得分:1)
在模态之间交换信息的最佳方法是使用服务。 我可以向您显示的最佳解决方案是:https://angularfirebase.com/lessons/sharing-data-between-angular-components-four-methods/
使用最后一种方法:)
答案 1 :(得分:1)
大多数情况下,您应该使用@Input
和@Output
有时(例如由于<router-outlet></router-outlet>
)是不可能的,您可以向这两个组件注入服务,并通过rxjs中的 Subject / BehaviourSubject 进行通信。
服务中的代码
public subject$: Subject<any> = new Subject<any>();
组件1中的代码
private subs = [];
constructor(private _serviceName: SomeService){}
ngOnInit(): void {
this.subs.push(this._serviceName.subject$.subscribe(data => {console.log(data);}));
}
ngOnDestroy(): void {
this.subs.forEach(s => s.unsubscribe());
}
组件2中的代码
constructor(private _serviceName: SomeService){
this._serviceName.subject$.next(anyData); // send data
}
别忘了从主题退订OnDestroy!
这是一种自己完成的自定义方式。大多数情况下,库都是以与模式生成的动态生成组件进行通信的方式构建的。