首页 > 解决方案 > 每次获取数据时,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>

标签: angularrxjs6

解决方案


推荐阅读