创建了Highcharts实例,其中Angular生命周期钩子
我目前正在使用Angular 7+和 我使用以下方法集成了Highcharts Highcharts中有一个创建了Highcharts实例,其中Angular生命周期钩子,angular,highcharts,Angular,Highcharts,我目前正在使用Angular 7+和 我使用以下方法集成了Highcharts Highcharts中有一个callbackFunction,我们可以使用它来获取图表实例。 然而,我还没有弄清楚两件事: 什么时候创建图表的实际实例以及选项,如Angular中的生命周期挂钩?或者它独立于生命周期挂钩 我看到一个开发人员的例子,他在
callbackFunction
,我们可以使用它来获取图表实例。
然而,我还没有弄清楚两件事:
选项
,如Angular中的生命周期挂钩?或者它独立于生命周期挂钩
中使用了
生命周期钩子,并且运行正常(即我们从回调中获得了一个图表实例)。但是,对于ngOnChanges
钩子,同样的方法不起作用
所以我的观点是,假设有一个@Input
属性与图形数据相关,它将由Highcharts.chart呈现(比如说附加一个新的系列),然后,我必须使用ngOnChanges方法来检测输入属性中的更改,并且将在ngOnInit之前调用ngOnChanges。那么我如何获得图表实例呢?那我怎么做一个addSeries呢
addSeries
只在按钮点击时起作用而不在ngOnInit中起作用?取消对hello.component.ts中的行号59的注释以查看它
hello.component.ts
。
在这里,您只需要更新图表选项
如果你想更新数据
ngOnChanges(){
console.log(this.newData);
this.chartOptions.series[0]=this.newData;
}
如果您想添加新系列
ngOnChanges(){
console.log('Inside ngOnchanges');
this.chartOptions.series.push(this.newData)
}
您的this.chartCreated.addSeries(this.newData)
在那里不起作用,因为它是异步函数,所以在回调之外您可能无法定义chartCreated
。若你们把这段代码放在回调函数中,你们会看到它会添加新的序列。使用chartoptions创建的第一个系列chartCreated
,这就是单击工作的原因最后,您不需要创建额外的变量,您可以使用chartoptions更新或添加新的序列。根据@pc\u coder给出的解释,我删除了
ngOnInit
,并在
内部实现了添加序列
,效果良好
export class HelloComponent implements OnChanges {
@Input() name: string;
@Input() newData: any;
title = 'AngularTest';
chartCreated;
Highcharts: typeof Highcharts = Highcharts;
chartCallback: Highcharts.ChartCallbackFunction;
updateFlag: boolean = false;
clicked:boolean = false;
chartOptions: Highcharts.Options = {
series: [{
data: [1, 2, 3],
type: 'line'
}]
};
// ngOnInit(){
// console.log('Inside ngOnInit');
// this.chartCallback = (chart) => {
// this.chartCreated = chart;
// console.log('chart: ' + chart); // shows object
// }
//
// }
ngOnChanges(){
console.log('Inside ngOnchanges');
this.chartCallback = (chart) => {
this.chartCreated = chart;
console.log('chart: ' + chart);
this.chartCreated.addSeries(this.newData); // This worked :)
}
}
onClick(){
if(this.clicked==false){
this.chartCreated.series[0].data[0].update(4);
this.clicked = true;
//this.chartCreated.addSeries(this.newData); // works on uncommenting
}
else{
this.chartCreated.series[0].data[0].update(1);
this.clicked = false;
}
}
}
它支持他的观点:“回调是异步的,不依赖于OnInit/OnChanges”,并且“图表实例是在设置选项后创建的””您应该共享您尝试的代码。是否查看并告知是否还需要其他内容?是否要从appcomponent发送并在hellocomponent中自动更改?是的,我希望出现与我单击按钮时相同的现象,且第59行未注释。i、 添加更多的series.hello.component.ts会保持图表,对吗?如果是这种情况,我建议该组件的ngOnInit()函数将引导您访问其子组件,如购物车及其属性。这就是为什么你没有定义。ngOnChanges()钩子在ngOnInit钩子之前被调用。请阅读(特别是第二个蓝色方框:)谢谢您的回复。但你能简要回答我提出的3个问题吗?使用addSeries也没有办法吗?我用您的问题更新了答案@KL_KISNE_DEKHA_hai谢谢您的回复。我可以说图表回调和addSeries与您的结论都是异步的吗?回调是ayncok,谢谢您的澄清。我发布了一段代码来支持你的解释。看一看并在初始加载完成后启动回调。这意味着,当您添加内部回调时。这意味着查特已经准备好添加系列了。嘿@pc_编码器,谢谢你。这确实帮了大忙。你能把我的问题也投赞成票吗:)。让更多的人参与进来。