gpt4 book ai didi

javascript - 如何动态添加数据到mat-table dataSource?

转载 作者:太空狗 更新时间:2023-10-29 16:51:31 24 4
gpt4 key购买 nike

我有来自后端的数据流,我看到它在控制台打印,现在我正在尝试将事件推送到 dataSource 其抛出错误 dataSource 未定义。有人可以帮助如何动态添加数据到物化表吗?

stream.component.html

<mat-table #table [dataSource]="dataSource"></mat-table>

流.component.ts

import {
Component,
OnInit
} from '@angular/core';
import {
StreamService
} from '../stream.service';
import {
MatTableDataSource
} from '@angular/material';
import * as io from 'socket.io-client';

@Component({
selector: 'app-stream',
templateUrl: './stream.component.html',
styleUrls: ['./stream.component.css']
})
export class StreamComponent implements OnInit {
displayedColumns = ['ticketNum', "assetID", "severity", "riskIndex", "riskValue", "ticketOpened", "lastModifiedDate", "eventType"];
dataSource: MatTableDataSource < Element[] > ;
socket = io();

constructor(private streamService: StreamService) {};

ngOnInit() {
this.streamService.getAllStream().subscribe(stream => {
this.dataSource = new MatTableDataSource(stream);
});
this.socket.on('newMessage', function(event) {
console.log('Datasource', event);
this.dataSource.MatTableDataSource.filteredData.push(event);
});
}
}


export interface Element {
ticketNum: number;
ticketOpened: number;
eventType: string;
riskIndex: string;
riskValue: number;
severity: string;
lastModifiedDate: number;
assetID: string;
}

最佳答案

我已经找到了这个问题的解决方案,基本上如果你这样做的话:

this.dataSource.data.push(newElement);//不起作用

但是如果你替换整个数组那么它就可以正常工作。所以你的最终代码必须是:

this.socket.on('newMessage', function(event) {
const data = this.dataSource.data;
data.push(event);
this.dataSource.data = data;
});

您可以在此处查看问题 -> https://github.com/angular/material2/issues/8381

关于javascript - 如何动态添加数据到mat-table dataSource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47581267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com