Angular 2指令:如何在指令中获取创建的echarts实例?
Angular 2 directive: How to get created echarts instance in directive?
目的:我正在尝试为 ECharts(图表库)构建一个简单的 Angular 2 指令
详情:
我在 ngAfterViewInit()
中创建了图表,这是第一次成功,图表会在 window 调整大小时调整大小。
然后我点击另一个页面,ngOnDestroy()
运行,图表被破坏。
然后我点击回到图表页面,重新创建了图表,但是,这次图表在 window 调整大小时不会调整大小,并且 console.log(chart)
returns 'undefined'
而不是 echarts 实例。
如何重新获取echarts实例并调整大小?
全部代码:
ECharts EChartsDirective
的全部代码如下:
import { Directive, ElementRef, Input } from '@angular/core';
let echarts = require('echarts');
@Directive({ selector: '[myECharts]' })
export class EChartsDirective {
el: ElementRef;
constructor(el: ElementRef) {
this.el = el;
}
@Input() EChartsOptions: any;
private mychart;
ngAfterViewInit() {
let chart = this.mychart = echarts.init(this.el.nativeElement);
if (!this.EChartsOptions) return;
this.mychart.setOption(this.EChartsOptions);
$(window).on('resize', function(){
console.log(chart);
chart.resize(); // <- this only works for the first time
// if I change to another page, then back to chart page, it will return 'undefined'
// the chart is still there, but won't resize on window resize any more
})
}
ngOnDestroy() {
if (this.mychart) {
this.mychart.dispose();
}
}
}
ngAfterViewInit() {
this.mychart = echarts.init(this.el.nativeElement);
if (!this.EChartsOptions) return;
this.mychart.setOption(this.EChartsOptions);
}
@HostListener('window:resize)
onResize() {
console.log(chart);
if(this.mychart) {
this.mychart.resize();
}
}
使用ngx-echarts,你可以Angular更友好的方式,在你的html:
<div echarts (chartInit)="onChartInit($event)" [options]="options" class="demo-chart"></div>
在您的组件中:
onChartInit(e: any) {
this.chartInstance = e;
console.log('on chart init:', e);
}
来源:https://xieziyu.github.io/ngx-echarts/#/basic/basic-usage
目的:我正在尝试为 ECharts(图表库)构建一个简单的 Angular 2 指令
详情:
我在 ngAfterViewInit()
中创建了图表,这是第一次成功,图表会在 window 调整大小时调整大小。
然后我点击另一个页面,ngOnDestroy()
运行,图表被破坏。
然后我点击回到图表页面,重新创建了图表,但是,这次图表在 window 调整大小时不会调整大小,并且 console.log(chart)
returns 'undefined'
而不是 echarts 实例。
如何重新获取echarts实例并调整大小?
全部代码:
ECharts EChartsDirective
的全部代码如下:
import { Directive, ElementRef, Input } from '@angular/core';
let echarts = require('echarts');
@Directive({ selector: '[myECharts]' })
export class EChartsDirective {
el: ElementRef;
constructor(el: ElementRef) {
this.el = el;
}
@Input() EChartsOptions: any;
private mychart;
ngAfterViewInit() {
let chart = this.mychart = echarts.init(this.el.nativeElement);
if (!this.EChartsOptions) return;
this.mychart.setOption(this.EChartsOptions);
$(window).on('resize', function(){
console.log(chart);
chart.resize(); // <- this only works for the first time
// if I change to another page, then back to chart page, it will return 'undefined'
// the chart is still there, but won't resize on window resize any more
})
}
ngOnDestroy() {
if (this.mychart) {
this.mychart.dispose();
}
}
}
ngAfterViewInit() {
this.mychart = echarts.init(this.el.nativeElement);
if (!this.EChartsOptions) return;
this.mychart.setOption(this.EChartsOptions);
}
@HostListener('window:resize)
onResize() {
console.log(chart);
if(this.mychart) {
this.mychart.resize();
}
}
使用ngx-echarts,你可以Angular更友好的方式,在你的html:
<div echarts (chartInit)="onChartInit($event)" [options]="options" class="demo-chart"></div>
在您的组件中:
onChartInit(e: any) {
this.chartInstance = e;
console.log('on chart init:', e);
}
来源:https://xieziyu.github.io/ngx-echarts/#/basic/basic-usage