Javascript 角度5+;:订阅给父可观察对象的子组件在取消隐藏时未获取值

Javascript 角度5+;:订阅给父可观察对象的子组件在取消隐藏时未获取值,javascript,angular,event-handling,observable,lifecycle,Javascript,Angular,Event Handling,Observable,Lifecycle,编辑2:似乎是我的一般问题和解决方案(使用setTimeout使Angular的生命周期得以实现)。如果可能的话,我会关闭这个网站或者发布我自己问题的答案 参见编辑,了解不涉及受试者/观察者但本质上是相同问题的更简单的复制 我有一个父组件,负责从服务获取数据 export class ParentComponent implements OnInit { public mySubject: Subject<Foo[]> = new Subject<Foo[]>();

编辑2:似乎是我的一般问题和解决方案(使用
setTimeout
使Angular的生命周期得以实现)。如果可能的话,我会关闭这个网站或者发布我自己问题的答案

参见编辑,了解不涉及受试者/观察者但本质上是相同问题的更简单的复制

我有一个父组件,负责从服务获取数据

export class ParentComponent implements OnInit {
  public mySubject: Subject<Foo[]> = new Subject<Foo[]>();
  public buttonClicked = false;
  private currentValues: Foo[] = null;

  constructor(private SomeService myService) { }

  this.myService.get().subscribe(values => {
    this.mySubject.next(values); // Does NOT work when a child component is hidden, as expected.
    this.currentValues = values; // Keep value so we can manually fire later.
  });

  private buttonClickHandler() {
    this.buttonClicked = true;
    this.mySubject.next(this.currentValues);
  }
}

您需要使用
behavior Subject
而不是Subject,它最初会发出先前设置的值


我认为这不是解决我问题的办法。我没有保留当前值的问题(我可以稍后重构代码以使用
BehaviorSubject
,而不是手动保留该值)。我的问题是,排放根本不会发生在一个未隐藏的组件上。我不认为
BehaviorSubject
能解决这个问题?可能是错的,你有没有可能复制这个?
<div *ngIf="buttonClicked">
  <div id="someElement">Foo</div>
</div>
public someMethod(): void {
  this.buttonClicked = true;
  const container = document.getElementById('someElement'); // DOES NOT WORK if this.buttonClicked was false at the start of this method!
}