我似乎无法从子组件触发父组件的异步管道来更新视图。这可能听起来有点令人困惑,但让我尝试通过显示我的代码的简化版本来解释。
如果有一个由另一个类扩展的类。
export class ParentComponent implements OnInit{
protected subject$: BehaviorSubject<string[]>;
ngOnInit() {
this.subject$ = new BehaviorSubject<string[]>([]);
}
}
使用如下所示的模板:
<span *ngFor="let niceString of subject$ | async">
{{niceString}}
</span>
扩展:
export class ChildComponent extends ParentComponent implements OnInit{
ngOnInit() {
super.ngOnInit();
this.subject$.next(['string1', 'string2']);
}
}
模板未在浏览器中更新。如果我在父组件中使用 subject$.next 调用该行,它将按预期更新并在浏览器中显示这两个字符串。
因此,我尝试通过延迟 3 秒调用 SetTimeOut 来尝试使用它,以查看是否以某种方式将其调用为快速。这并没有解决问题。我还将 subject$.next 添加到父级的函数中,然后从子级调用该函数,这也无法解决。但是,如果我在父类中调用相同的新函数,则视图会按预期更新。
我还在父级中添加了一个自定义订阅,它像这样监听主题 $:
protected subjectSubscription: Subscription;
this.subjectSubscription = this.subject$.pipe(take(2)).subscribe((justChecking: string[]) => {
debugger;
});
这将按预期触发,但浏览器中的视图未使用值“string1”、“string2”更新。
我在这里错过了什么吗?
(编辑)添加 StackBlitz:https ://stackblitz.com/edit/angular-tt65ig