繁体   English   中英

从ngOnInit的父组件调用时主题未触发

[英]Subject not triggering when being called from parent component in ngOnInit

我正在使用Rxjs和Angular7。我有一个父组件和一个子组件。 我有一种方法可以在子组件上调用Subject

updateSubject(text: string) {
  this.subject$.next(text);
}

我使用ViewChildngOnInit父组件中ngOnInit ViewChild

ngOnInit() {
  this.childComponent.updateSubject('New Text');
}

但是,如果我从父组件中的ngOnInit调用,则永远不会触发对this.subject$subscribe 如果我使用父级或子级中的一个按钮调用该方法,则subscribe会触发。 我究竟做错了什么?

此处查看StackBlitz演示。

父级初始化 ,将调用子级中的subscribe() Angular按照与DOM相同的顺序初始化组件,因此先初始化父组件,然后再初始化子组件。

如果未订阅任何内容,则Subject()会丢弃发射的值,并且由于子级订阅较晚,因此不会接收该值。

您可以使用BehaviorSubject()ReplaySubject()取决于您是否需要初始值。

您需要使用AfterViewInit生命周期挂钩。 调用OnInit时尚未渲染您的子组件。

所以这将工作:

ngAfterViewInit() {
 this.childComponent.updateSubject('View initialized');
}

使用BehaviorSubject代替Subject

subject$: BehaviorSubject<string> = new BehaviorSubject<string>(null);

遵循此问题以了解主题和行为主题之间的区别

主体与行为主体之间的差异

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM