angular - 画布图表未在 Angular 中生成
问题描述
我正在构建一个使用ng2- 图表和 Angular的应用程序。在此我使用 Canvas 标签来显示折线图。有多个属性要显示在画布中,例如电池电压、水位等。默认情况下,我正在显示水位,但是当我选择Battery Voltage时,图表不会显示。
以下是代码文件,以便更好地理解
图.component.html
<div class="filterDate">
<mat-form-field appearance="fill">
<mat-label>{{'Choose a date'|translate}}</mat-label>
<input id="selectedDateInput" [disabled]="isSensor" [(ngModel)]="this.dateFilter.fromDateTime" matInput
#selectedDateInput [matDatepicker]="myDatepicker" (dateChange)="onChange(selectedDateInput.value)">
<mat-datepicker-toggle matSuffix [for]="myDatepicker"></mat-datepicker-toggle>
<mat-datepicker #myDatepicker></mat-datepicker>
</mat-form-field>
<mat-form-field appearance="fill">
<mat-label>{{'Select property'|translate}}</mat-label>
<mat-select [disabled]="isSensor" #sensorProperty name="sensorProperty" [(ngModel)]="comparePoint.sensorProperty">
<mat-option *ngFor='let property of sensorProperties' (click)="handlePropertySelectionCustom(property.name)"
[value]="property.id">
{{property.name|translate}}
</mat-option>
</mat-select>
</mat-form-field>
</div>
<div *ngIf="barChartData.length>0" class="chart" style="display: block">
<canvas baseChart [datasets]="barChartData" [labels]="barChartLabels" [colors]="barChartColors"
[legend]="barChartLegend" [options]="barChartOptions" chartType='line' style="overflow-x: auto;">
</canvas>
</div>
<div *ngIf="barChartData.length==0" class="chart" style="display: block;text-align: center;">
<p>{{'No data'|translate}}</p>
</div>
图.component.ts
sensorProperties: any = [
{name: 'Battery Voltage', id: 1},
{name: 'Freshwater Electrical Conductivity', id: 2},
{name: 'Water Quantity', id: 3},
{name: 'Water Level', id: 4},
{name: 'Turbidity', id: 5},
];
handlePropertySelectionCustom(propertyName: any): any {
debugger;
this.barChartLabels = [];
this.barChartData = [];
console.log(propertyName);
console.log(this.currentSensorId);
this.todoService.getAllByMainSensorId(this.currentSensorId, this.customDate).subscribe((response: any) => {
console.log(response.waterFlowResponse);
if(propertyName === 'Battery Voltage'){
for (let i = 0 ; i < response.waterFlowResponse.length; i++) {
this.barChartLabels.push(response.waterFlowResponse[i].dateTime);
this.barChartData.push(response.waterFlowResponse[i].batteryVoltage);
}
}
if(propertyName === 'Freshwater Electrical Conductivity'){
for (let i = 0 ; i < response.waterFlowResponse.length; i++) {
this.barChartLabels.push(response.waterFlowResponse[i].dateTime);
this.barChartData.push(response.waterFlowResponse[i].freshwaterConductivity);
}
}
if(propertyName === 'Water Level'){
for (let i = 0 ; i < response.waterFlowResponse.length; i++) {
this.barChartLabels.push(response.waterFlowResponse[i].dateTime);
this.barChartData.push(response.waterFlowResponse[i].waterLevel);
}
}
if(propertyName === 'Water Quantity'){
for (let i = 0 ; i < response.waterFlowResponse.length; i++) {
this.barChartLabels.push(response.waterFlowResponse[i].dateTime);
this.barChartData.push(response.waterFlowResponse[i].waterQuantity);
}
}
if(propertyName === 'Turbidity'){
for (let i = 0 ; i < response.waterFlowResponse.length; i++) {
this.barChartLabels.push(response.waterFlowResponse[i].dateTime);
this.barChartData.push(response.waterFlowResponse[i].turbidity);
}
}
});
}
问题:问题是虽然数据在API 调用中被推送到 barChartLables和barChartData数组中,但在外部它变空了。 请问有什么解决办法吗?
解决方案
推荐阅读
- c++ - 如何在实际终端中重现 VS Code 扩展提供的错误
- r - 如何设置 rmarkdown html 文档的边距
- sql - 将 JSON 元素转换为 SQL 表格式
- javascript - 如何解决这个问题“你可能需要一个额外的加载器来处理这些加载器的结果”
- vim - How to open new tabs instead of splits by default in VIM?
- python - Plotly Dash:如何在选项卡内显示三个相邻的图表
- r - Converting boxplot to scatter-plot in R
- javascript - Next.js 通过 css 进行图像样式设置
- reactjs - 反应测试库。测试文本字段中字符串的长度
- google-apps-script - 如何跳过 OpenById 的“无效参数”并在代码中继续