我正在尝试将现有的应用程序转换为Angular。我对Angular非常陌生,在很多事情上我都在苦苦挣扎,我希望它会变得非常简单。最新的是试图捕获不相关组件中的模型更改。
我的结构: App >(布局/数据服务)>(组件A/组件B)
组件A订阅了一个数据服务,该服务的模型表示一组自定义子组件的值。这些子组件修改输入,并向组件A返回一个数值,组件A反过来更新数据服务中的模型。这里没有问题,它是按照描述的那样工作的。
组件B也订阅了相同的数据服务,并基于模型值的进一步计算显示结果。问题是当组件A的子组件B的输入值发生更改时,组件B的值将会更新,但我无法在更新时触发UpdataCalculations()函数。为了解决这个问题,我添加了ngDoCheck(),并将我的函数放在其中,但这对我来说真的很粗糙。我真正想做的是在组件B级别向模型添加一个onChange侦听器。
所以我想我的问题是A:这在Angular中是可能的吗?B:有没有更好的方法来实现这一点?
服务:
export class JobDataService {
private jobData = new BehaviorSubject(new Job_Info_View_Model);
currentJob$ = this.jobData.asObservable();
constructor() {}
}组件B:
constructor(
private jobData: JobDataService,
) {}
ngOnInit() {
this.jobData.currentJob$.subscribe( (observing: Job_Info_View_Model) => { this.currentJob = observing; } );
}
ngDoCheck() {
this.UpdataCalculations();
}感谢您的帮助
编辑:组件A和B是一个单独的组件真的没有意义,所以如果我可以的话我想避免这种情况。
发布于 2019-03-10 23:48:20
当由@Input()装饰器标记的字段从父组件获得新值时,就会调用ngOnChanges钩子。ngDoCheck one在每次检测到变化时都会被调用,这是非常常见的。在您的示例中,使用了subject,并且每次值更新时都会调用订阅回调,因此最好的选择是只在该回调中进行计算。
this.jobData.currentJob$.subscribe( (observing: Job_Info_View_Model) => {
this.currentJob = observing;
this.UpdataCalculations();
} );https://stackoverflow.com/questions/55089070
复制相似问题