Я использую Angular 6
.
В моем файле component.ts я должен инициализировать график и сделать это в методе ngOnIt () , подобном этому
@Component({
selector: 'app-contact-detail',
templateUrl: './contact-detail.component.html',
styleUrls: ['./contact-detail.component.css']
})
export class ContactDetailComponent implements OnInit {
contact_id: string;
public graph_data_year;
constructor(
private activatedRoute: ActivatedRoute,
private graphDataService: GraphDataService
) { }
ngOnInit() {
this.activatedRoute.params.subscribe(
param => {
this.contact_id = param['id'];
}
);
/**
* Get Amount Given Graph Data
*/
this.graphDataService.get_data(this.contact_id).subscribe(
res => {
const data = [];
res.forEach(e => {
data.push(e.total);
});
this.graph_data_year = data;
this._setGraphData();
}
);
this.initializeGraph();
}
_setGraphData() {
this.lineBigDashboardChartData[0]['data'] = this.graph_data_year;
// this console here gives updated value in the console window, but no update on chart
console.log(this.lineBigDashboardChartData);
}
/**
* Graph
*/
initializeGraph() {
...
this.lineBigDashboardChartData = [
{
label: 'Data',
...
...
data: this.graph_data_year
}
];
this.lineBigDashboardChartLabels = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'];
this.lineBigDashboardChartType = 'line';
}
}
и component.html похож на
<canvas baseChart id="bigDashboardChart"
[datasets]="lineBigDashboardChartData"
[labels]="lineBigDashboardChartLabels"
[chartType]="lineBigDashboardChartType"></canvas>
Но это не обновляет диаграмму с обновленным значением graph_data_year , которое обновляется this.graphDataService . и показывает пустой график.
console.log(this.lineBigDashboardChartData);
после обновления данных печатает обновленные значения в окне консоли, но данные диаграммы не обновляются.
Как я могу иметь асинхронную переменную внутри компонента, которая при обновлении обновляет значение в каждом месте, где она использовалась в компоненте? Или как я могу обновить корзину после обновления данных?