主要问题就是标题一样。
这是我highchats的封装,test 属性是我用来测试,监听的。
<template>
<div :class="className" :style="{height:height,width:width}"></div>
</template>
<script>
import Highcharts from "highcharts/highstock";
import HighchartsMore from "highcharts/highcharts-more";
import HighchartsDrilldown from "highcharts/modules/drilldown";
import Highcharts3D from "highcharts/highcharts-3d";
import { debounce } from "@/utils";
HighchartsMore(Highcharts);
HighchartsDrilldown(Highcharts);
Highcharts3D(Highcharts);
export default {
props: {
className: {
type: String,
default: "chart"
},
width: {
type: String,
default: "100%"
},
height: {
type: String,
default: "350px"
},
test: {
type: String,
default: ''
},
autoResize: {
type: Boolean,
default: true
},
chartData: {
type: Object
}
},
name: 'highcharts',
data() {
return {
chart: null,
options: Object
};
},
mounted() {
this.initChart();
if (this.autoResize) {
this.__resizeHanlder = debounce(() => {
if (this.chart) {
this.chart.reflow();
}
}, 100);
window.addEventListener("resize", this.__resizeHanlder);
}
// 监听侧边栏的变化
const sidebarElm = document.getElementsByClassName("sidebar-container")[0];
sidebarElm.addEventListener("transitionend", this.__resizeHanlder);
},
beforeDestroy() {
if (!this.chart) {
return;
}
if (this.autoResize) {
window.removeEventListener("resize", this.__resizeHanlder);
}
const sidebarElm = document.getElementsByClassName("sidebar-container")[0];
sidebarElm.removeEventListener("transitionend", this.__resizeHanlder);
this.chart.destroy();
this.chart = null;
},
watch: {
chartData: {
deep: true,
handler(val) {
this.setOptions(val);
console.log(val)
}
},
test:{
handler(val){
console.log(val)
}
}
},
methods: {
setOptions(expectedData) {
this.options = expectedData
},
initChart() {
this.setOptions(this.chartData);
this.chart = new Highcharts.Chart(this.$el, this.options);
}
}
};
</script>
以下是页面调用
<Highchats :chart-data="temp_data.Highchats_linedata"></Highchats>
我吧highchats 的整个配置对象,定义在了父组件的 data 中,第一次页面加载 的时候,能正常渲染。
但是当我通过方法改变 这个配置对象的 data 时,highchats 中监听不到,请各位指点一下。
在网上看了很多答案,都是创建图表后,拿到该图表的实例,然后通过调用highchats的函数进行更新图表,
而没有看到在组件中,通过监听让highchats 自己进行更新的,这样是不可行吗?
1.这时在子组件的钩子里就能拿到父组件props传过来的值了,页面需要动态更新的参数,computed动态去计算(不推荐watch)
2.watch监听也可以,我一开始是这么解决的,后来觉得1更好点。但是watch不能监听数组里面某个值得变化,需要配合js的splic,push等改变数组操作使用
以上是个人对此的一个解决办法