angular - 每次获取数据时,Angular rxjs-interval 运算符(轮询)都会重绘组件视图
问题描述
我的组件通过以下方式从服务中获取数据:
ngOnInit() {
interval(5000)
.pipe(
startWith(0),
switchMap(() => this.rawMaterialDataService.returnData())
)
.subscribe(data => {
this.rawMaterialProductData = data;
});
}
然后它将它呈现到另一个组件中,如下所示:
<section *ngFor='let stock of rawMaterialProductData trackBy:stock?.key'>
<app-raw-material-view [stockGroupData]='stock'></app-raw-material-view>
</section>
问题是每次重新获取数据时,子组件都会重新渲染,而不是父组件。我在子组件的 Init 方法中放置了一个 console.log,每 5 秒触发一次日志消息,这意味着 Init 运行了。
因此,问题在于我的子组件具有用户查看的下拉模板,但每次组件重新呈现模板时,模板都会关闭到其初始状态。
如您所见,我试图trackBy
解决此问题,但没有帮助。
- 编辑 -
这是使用数据的组件
<table (click)=collaps()>
<thead>
<tr>
<th id='th1'>{{stockGroupData.key}}</th>
<div class="topnav-right">
<th *ngIf="!expandedIndex" class='headingIcon'> <i class="material-icons">expand_more</i></th>
<th *ngIf="expandedIndex" class='headingIcon'> <i class="material-icons">expand_less</i></th>
</div>
</tr>
</thead>
<tr *ngIf="!expandedIndex">
Test
</tr>
</table>
解决方案
推荐阅读
- c++ - 函数返回类型中的 decltype(auto) 不推导出 const 类型
- c - strncpy函数的循环看不懂
- mysql - AWS - RDS - MySQL - 内存不足
- sprite-kit - SpriteKit 对象不相互碰撞
- ios - URLSession 的 dataTask 未运行
- javascript - 我怎样才能使它根据输入产生不同的结果?
- html - (HTML/CSS) 背景在移动设备和桌面设备上的呈现方式不同
- vue.js - vue.js 显示数据彼此相邻而不是在
- python - 启用和禁用现有装饰器的首选模式?
- python - 有没有办法异步等待redis中的键?