Я создаю веб-приложение, которое должно показывать данные датчика.он получает сенсорные данные через веб-сокет.Компонент подписывается на веб-сокет, в notify()
наблюдатель помещает правильные значения в массив, который впоследствии (как предполагается, будет) отображен на графике.Но когда вызывается функция render()
, внутри графика не отображаются точки.
Когда я вставляю точку / точки в массив dataPoints[]
до того, как компонент получит какие-либо данные, точка действительно появится.Например, если я вставлю массив случайных точек в массив в функции ngOnInit()
.
Но как только данные поступают через веб-сокет, все остальные точки исчезают, а полученные точки становятся невидимыми.Я знаю, что они есть, потому что, если вы наведите на них курсор, их координаты будут показаны, но они будут такими же белыми, как фон
Ниже показана функция обратного вызова, в которую я вставляю значения в массив dataPoints (которыйобъявлено в начале файла)
//this is where the component subscribes to the websocket and
wsSubscription = this.wsService.getObservableWebsocket().subscribe(
data => {
this.messageAsObject = JSON.parse(data);
this.dataPoints.push({x: this.messageAsObject.Content[6],y: this.messageAsObject.Content[8]});
// correct values are pushed into the dataPoints array
this.chart.render();
//it does render but points are invisible
},
err => console.log(err),
() => console.log("observable stream is over")
);
ngOnInit() {
//example values would be inserted here
this.chart = new CanvasJS.Chart("chartContainer2",
{
theme : "light1",
zoomEnabled: true,
zoomType: "xy",
animationEnabled: true,
exportEnabled: true,
title: {
text: "XZ Distance"
},
subtitles:[{
text: ""
}],
data: [
{
type: "line",
dataPoints: this.dataPoints
}],
axisX:{
title:"X Value",
minimum: -50,
maximum: 50,
gridColor:"black",
gridThickness: 1 ,
crosshair : {
enabled: true,
},
},
axisY:{
title:"Z Value",
minimum: -50,
maximum: 50,
gridColor:"black",
gridThickness: 1 ,
crosshair : {
enabled: true,
}
}
});
this.chart.render();
}
что я сделал не так?