angular - 为什么异步管道的新数据不会导致数据重新呈现?
问题描述
我已经阅读了很多关于 Angular/ReactJS 的背景知识,并试图很好地理解生命周期钩子以及它们如何一起发挥作用,但仍然让我感到困惑的是以下场景。
假设您有一个 someService,并且在该服务中定义了一个名为 someBehaviorSubject 的 BehaviorSubject。它在 someService 中定义为:
public someBehaviorSubject= new BehaviorSubject<someInterface[]>([]);
然后订阅该行为主题someAPIcall(argument: string): void
。someService.someAPIcall 定义为:
someAPIcall(argument: string): void {
this.http.get<someInterface[]>(argument).subscribe(this.someBehaviorSubject);
}
someInterface 定义为:
interface someInterface {
data: string
}
假设有一个名为 someParent 的父组件和一个名为 someChild 的子组件。someParent 有两个按钮调用:
someService.someAPIcall("A");
和
someService.someAPIcall("B");
分别。someChild 在模板中有以下内容:
<div*ngFor="let data of someService.someBehaviorSubject | async">
{{data}}
</div>
在我的观察中,当您单击 someParent 中的按钮 A 或按钮 B 时,数据会正确呈现数据集 A 或 B。但是,如果您在第一组数据呈现后单击另一个按钮,则不会使用新的数据重新呈现数据数据集。我希望它会通过直接订阅 BehaviorSubject 的异步管道。我不明白为什么不重绘数据?
解决方案
为了更新BehaviorSubject
值,您需要使用next()
将新值推送到BehaviorSubject
.
例子:
someAPIcall(argument: string): void {
this.http.get<someInterface[]>(argument).subscribe(data =>
{
this.someBehaviorSubject.next(data);
});}
有关 RxJS 主题的更多信息,请考虑查看文档。
推荐阅读
- javascript - FlatList exceeds its container with its content: How to make FlatList with fixed height
- python - 如何在拥抱脸中推动使用 pytorch 训练的 NLP 模型?
- node.js - 节点 mssql 批量插入作为事务的一部分
- installation - 如何从单个 MSIX 创建相关集?
- coordinate-transformation - 虚拟仿真环境CARLA与真实世界坐标之间的坐标转换
- python - Python - 不在函数中打印输出
- java - 我该如何解决这个 android studio 模拟器错误
- java - 循环获取资源
- git - 您可以使用“checkout scm”来获取 git 提交而不实际签出存储库吗?
- powershell - Powershell读取文本文件等到找到然后继续