Angular AmStockCharts updateChart:无法设置属性';数据上下文';未定义的
我正在使用angular 4.3.6和typescript 2.4.2。我正在从套接字读取一些数据,并试图将它们添加到数据提供程序中 基于此示例: 我正在为图表的数据更改排队。这适用于序列图,但对于股票图,我收到以下错误:Angular AmStockCharts updateChart:无法设置属性';数据上下文';未定义的,angular,typescript,amcharts,Angular,Typescript,Amcharts,我正在使用angular 4.3.6和typescript 2.4.2。我正在从套接字读取一些数据,并试图将它们添加到数据提供程序中 基于此示例: 我正在为图表的数据更改排队。这适用于序列图,但对于股票图,我收到以下错误: ERROR TypeError: Cannot set property 'dataContext' of undefined at b.parseStockData (amstock.js:formatted:232) at b.updateData (a
ERROR TypeError: Cannot set property 'dataContext' of undefined
at b.parseStockData (amstock.js:formatted:232)
at b.updateData (amstock.js:formatted:145)
at b.afterWrite (amstock.js:formatted:91)
at b.write (amstock.js:formatted:52)
at b.validateNow (amstock.js:formatted:1143)
at index.js:335
at ZoneDelegate.webpackJsonp.../../../../zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:392)
at Zone.webpackJsonp.../../../../zone.js/dist/zone.js.Zone.run (zone.js:142)
at NgZone.webpackJsonp.../../../core/@angular/core.es5.js.NgZone.runOutsideAngular (core.es5.js:3844)
at AmChartsService.webpackJsonp.../../../../@amcharts/amcharts3-angular/es2015/index.js.AmChartsService.updateChart (index.js:333)
这是我的代码(错误发生在updateChart=>parseStockData上):
从'@angular/core'导入{Component,OnInit};
从'@angular/Router'导入{Router};
从“rxjs/Rx”导入{Subject,observatable,Subscription};
从“../../services/websocket.service”导入{WebsocketService};
从“../../entities/SensorData”导入{SensorData};
从“@amcharts/amcharts3”导入{AmChartsService,AmChart}”;
从“../../app.enums”导入{MessageTypes};
@组成部分({
templateUrl:'first.component.html',
提供者:[WebsocketService,AmChartsService]
})
导出类DashboardComponent实现OnInit{
私人海图:阿姆查特;
公共图表数据:数组=[];
私人插座:主体;
私有updateQueue=[];
私有完成加载:布尔值=false;
结果:字符串[];
建造师(
私有websocketService:websocketService,
专用AmCharts:AmCharts服务){
this.socket=_websocketService.createWebsocket();
让updateChartInterval=setInterval(()=>{
this.processUpdateQueue();
如果(此完成加载){
clearInterval(updateChartInterval);
}
}, 500);
}
公共处理数据(数据:传感器数据):无效{
if(data.messageType==MessageTypes.BVP){
这个是.chartData.push({
日期:新日期(data.data.timestamp),
bvp:data.data.value
});
}
if(data.messageType==MessageTypes.GSR){
这个是.chartData.push({
日期:新日期(data.data.timestamp),
gsr:data.data.value
});
}
this.updateQueue.push({“chart”:this.chart,“data”:this.chartData})
};
public processUpdateQueue():void{
if(this.updateQueue.length){
让item=this.updateQueue.shift();
如果(项目!=未定义){
this.AmCharts.updateChart(item.chart,()=>{
item.chart.dataSets[0].dataProvider.push(item.data);
});
}
}
};
ngAfterViewInit(){
this.chart=this.AmCharts.makeChart(“chartdiv”,this.makeOptions());
}
makeOptions(){
返回{
“类型”:“库存”,
“主题”:“光”,
“Gluentheend”:没错,
“数据集”:[{
“标题”:“第一个数据集”,
“dataProvider”:this.chartData,
“类别字段”:“日期”
}],
“小组”:[{
“showCategoryAxis”:错误,
“标题”:“价值”,
“百分高度”:60,
“股票图表”:[{
“id”:“g1”,
“valueField”:“bvp”
}],
“stockLegend”:{}
}, {
“标题”:“卷”,
“百分高度”:40,
“股票图表”:[{
“valueField”:“gsr”,
“类型”:“列”
}],
“stockLegend”:{}
}],
“图表滚动条设置”:{
“图形”:“g1”
},
};
}
恩贡德斯特罗(){
如果(此图表){
this.AmCharts.destroyChart(this.chart);
}
}
ngOnInit():void{
这是socket.subscribe(
消息=>{
如果(message.data==“完成”){
this.finishedLoading=真;
控制台日志(“已完成加载数据”);
}否则{
let data:SensorData=JSON.parse(message.data);
这是handleData(数据);
}
},
错误=>{
console.log(错误)
}
);
}
}
我发现了问题。将makeOptions中的属性数据集更改为:
"dataSets": [{
"title": "first data set",
"fieldMappings": [{
"fromField": "bvp",
"toField": "bvp"
}, {
"fromField": "gsr",
"toField": "gsr"
}],
"dataProvider": this.chartData,
"categoryField": "date"
}]
解决了这个问题。股票图表似乎需要字段映射。我发现了这个问题。将makeOptions中的属性数据集更改为:
"dataSets": [{
"title": "first data set",
"fieldMappings": [{
"fromField": "bvp",
"toField": "bvp"
}, {
"fromField": "gsr",
"toField": "gsr"
}],
"dataProvider": this.chartData,
"categoryField": "date"
}]
解决了这个问题。股票图表似乎需要字段映射