blob: 18d43ef6bb24ea6d3ca8a19f6a3e19cfbf64e3cc [file] [log] [blame]
/** * Licensed to the Apache Software Foundation (ASF) under one or more *
contributor license agreements. See the NOTICE file distributed with * this work
for additional information regarding copyright ownership. * The ASF licenses
this file to You under the Apache License, Version 2.0 * (the "License"); you
may not use this file except in compliance with * the License. You may obtain a
copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless
required by applicable law or agreed to in writing, software * distributed under
the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. * See the License for the
specific language governing permissions and * limitations under the License. */
<template>
<div class="echarts" :style="`height:${height};width:${width};`"></div>
</template>
<script lang="ts">
import Vue from 'vue';
import { Component, Prop, Watch } from 'vue-property-decorator';
import echarts from 'echarts/lib/echarts';
import { Action } from 'vuex-class';
@Component
export default class RkEcharts extends Vue {
@Prop() private option: any;
@Prop() private clickEvent: any;
@Prop({ default: false }) private uncombine!: boolean;
@Prop({ default: '100%' }) private height!: string;
@Prop({ default: '100%' }) private width!: string;
@Action('CLEAR_CHARTS') private CLEAR_CHARTS: any;
private myChart: any = {};
private mounted(): void {
this.drawEcharts();
window.addEventListener('resize', this.myChart.resize);
}
private beforeDestroy(): void {
if (this.myChart.dispose) {
this.myChart.dispose();
}
window.removeEventListener('resize', this.myChart.resize);
}
@Watch('option', { deep: true })
private onoptionChanged(newVal: any, oldVal: any): void {
if (this.myChart) {
if (newVal) {
this.myChart.setOption(newVal, true); // clear cache
} else {
this.myChart.setOption(oldVal, true);
}
} else {
this.drawEcharts();
}
}
private drawEcharts(): void {
const el: any = this.$el;
this.myChart = echarts.init(el, '');
this.myChart.setOption(this.option);
this.myChart.on('click', (params: any) => {
this.clickEvent(params);
});
}
}
</script>
<style></style>