javascript - Angular 6 mat table DOM在拼接数据源后不更新

标签 javascript html angular typescript angular-material

我有一个mat-table

<mat-table #table [dataSource]="orders" [trackBy]="$index">

    <ng-container matColumnDef="id">
      <mat-header-cell *matHeaderCellDef> ID </mat-header-cell>
      <mat-cell *matCellDef="let row"> {{row.id}} </mat-cell>
    </ng-container>

    <ng-container matColumnDef="deliver_on">
        <mat-header-cell *matHeaderCellDef> Deliver On </mat-header-cell>
        <mat-cell *matCellDef="let row" [style.color]="row.deliver_on"> {{row.deliver_on}} </mat-cell>
    </ng-container>


    <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
    <mat-row [ngClass]="row.highlight_row"  *matRowDef="let row; columns: displayedColumns;"></mat-row>

</mat-table>
<mat-paginator [length]="pageLength" [pageSize]="pageSize" (page)="next($event)">
</mat-paginator>

我想更新特定逻辑内的行。

但是当我更新数据源(ARRAY SPLICE)时,DOM 没有改变

var order = data.payload.order;
var index = this.orders.findIndex((orders) => orders.id === order.id);

Object.defineProperty(order, "highlight_row", {
    value: 'highlight_row',
    writable: true,
    enumerable: true,
    configurable: true
});

if (index > -1) {
    // update at same position
    this.orders.splice(index, 1, order);
}
else {
    this.orders = [...this.orders, order];
}

最佳答案

来自 Material cdk文档并且完全在@Input() dataSource: CdkTableDataSourceInput<T>中:

If a data array is provided, the table must be notified when the array's objects are added, removed, or moved. This can be done by calling the renderRows() function which will render the diff since the last table render. If the data array reference is changed, the table will automatically trigger an update to the rows.

此外,从 JavaScript 的 Angular 来看,splice方法会变异(更改)数组,因此数组引用不会更改。

引用号:https://material.angular.io/cdk/table/api

关于javascript - Angular 6 mat table DOM在拼接数据源后不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55219725/

相关文章:

JavaScript 在一行中定义并返回一个变量

Javascript 对象属性 Console.log

angularjs - Angular js获取由div分隔的表单标签中元素的$valid值

angular - 如何无边距全屏

angular - 类型错误 : Converting circular structure to JSON when trying to POST request

javascript - React 路由器历史记录无法正确呈现

javascript - 如何将变量从 javascript 发送到 django 中的 View

jquery - 播放前隐藏 YouTube 视频嵌入图像

html - 如何设置 3 列,每列 1 个 Div 水平和垂直对齐?

javascript - 如何将 HTML 代码转换为 JSON 对象?