代码之家  ›  专栏  ›  技术社区  ›  Alfa Bravo

每次获取数据时,角度rxjs间隔操作符(轮询)都会重新绘制组件视图

  •  1
  • Alfa Bravo  · 技术社区  · 6 年前

    我的组件通过以下方式从服务获取数据:

    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>
    

    问题是,每次重新获取数据时,都会重新呈现子组件,而不是父组件。我放了一个控制台.log在子组件的Init方法中,每隔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>
    
    0 回复  |  直到 6 年前
    推荐文章