小编Rod*_*hoo的帖子

使用 mat table 数据源的角度输入变化检测性能

有谁知道更新 ngOnChanges 生命周期挂钩中的 mat 表数据源是否可以?或者是否存在潜在的数据泄漏或大规模性能问题?

这是我的意思的一个简单示例。

子组件有一个输入数据的父组件,如下所示:

<data-list [data]="someData"></data-list>
Run Code Online (Sandbox Code Playgroud)

和子组件:

import { Component, Input, SimpleChanges, OnInit, OnChanges } from '@angular/core';
import { MatTableDataSource } from '@angular/material';


@Component({
  selector: 'data-list',
  templateUrl: './data-list.component.html',
  styleUrls: ['./data-list.component.scss']
})
export class DataListComponent implements OnInit, OnChanges {
  @Input() data: any[];

  dataSource: MatTableDataSource<any>;
  displayedColumns = [
    'title',
    'detail'
  ];

  constructor() { }

  ngOnInit() {
    this.dataSource = new MatTableDataSource<any>(this.data);
  }

  ngOnChanges(changes: SimpleChanges) {
    this.dataSource = new MatTableDataSource<any>(changes.data.currentValue);
  }

}
Run Code Online (Sandbox Code Playgroud)

现在父组件订阅了不同的 observables,它们对数据的不同变化做出反应。也就是说,如果添加或删除数据,则父组件会相应地更新,并将其作为输入传递给子组件。

由于子组件使用 ngOnChanges 生命周期钩子来观察输入数据的变化,子组件通过实例化一个新的 MatTableDataSource 来更新表数据。

一切正常。除了 ngOnChanges …

datasource input ngonchanges angular5 angular-material-5

5
推荐指数
0
解决办法
3959
查看次数