首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >侦听由不相关组件更改的模型- Angular 7

侦听由不相关组件更改的模型- Angular 7
EN

Stack Overflow用户
提问于 2019-03-10 23:09:07
回答 1查看 86关注 0票数 0

我正在尝试将现有的应用程序转换为Angular。我对Angular非常陌生,在很多事情上我都在苦苦挣扎,我希望它会变得非常简单。最新的是试图捕获不相关组件中的模型更改。

我的结构: App >(布局/数据服务)>(组件A/组件B)

组件A订阅了一个数据服务,该服务的模型表示一组自定义子组件的值。这些子组件修改输入,并向组件A返回一个数值,组件A反过来更新数据服务中的模型。这里没有问题,它是按照描述的那样工作的。

组件B也订阅了相同的数据服务,并基于模型值的进一步计算显示结果。问题是当组件A的子组件B的输入值发生更改时,组件B的值将会更新,但我无法在更新时触发UpdataCalculations()函数。为了解决这个问题,我添加了ngDoCheck(),并将我的函数放在其中,但这对我来说真的很粗糙。我真正想做的是在组件B级别向模型添加一个onChange侦听器。

所以我想我的问题是A:这在Angular中是可能的吗?B:有没有更好的方法来实现这一点?

服务:

代码语言:javascript
复制
export class JobDataService {
  private jobData = new BehaviorSubject(new Job_Info_View_Model);
  currentJob$ = this.jobData.asObservable();
  constructor() {}
}

组件B:

代码语言:javascript
复制
  constructor(
    private jobData: JobDataService,
  ) {}

  ngOnInit() {
    this.jobData.currentJob$.subscribe( (observing: Job_Info_View_Model) => { this.currentJob = observing; } );
  }

  ngDoCheck() {
    this.UpdataCalculations();
  }

感谢您的帮助

编辑:组件A和B是一个单独的组件真的没有意义,所以如果我可以的话我想避免这种情况。

EN

回答 1

Stack Overflow用户

发布于 2019-03-10 23:48:20

当由@Input()装饰器标记的字段从父组件获得新值时,就会调用ngOnChanges钩子。ngDoCheck one在每次检测到变化时都会被调用,这是非常常见的。在您的示例中,使用了subject,并且每次值更新时都会调用订阅回调,因此最好的选择是只在该回调中进行计算。

代码语言:javascript
复制
this.jobData.currentJob$.subscribe( (observing: Job_Info_View_Model) => { 
  this.currentJob = observing;
  this.UpdataCalculations();
} );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55089070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档