echarts随记

1、echarts获取不到dom元素的几种情况

1)echarts在子组件中,根据父子组件生命周期,子组件渲染比父组件快

解决办法:
父组件

  beforeMount() {
    window.parentMounted = this._isMounted; // _isMounted是当前实例mounted()是否执行 此时为false
  },
  mounted() {
    window.parentMounted = this._isMounted; // _isMounted是当前实例mounted()是否执行 此时为true
  }

子组件

  mounted() {
    let pMountedTimer = window.setInterval(() => {
      if (window.parentMounted) {
        window.clearInterval(pMountedTimer);
        // 下面就可以写子组件想在mounted时执行代码(此时父组件的mounted已经执行完毕)
        let graph = this.$echarts.init(this.$refs.graph);
      }
    }, 1);
  },

2)echarts在弹窗等里面,页面初始化加载的时候不会渲染到dom树上,应该在弹窗显示的时候再调用echarts渲染方法,并用this.$nextTick等待页面渲染完

2、echarts大小随屏幕大小变化

参考文章
1)只有一个echart
在setOption之后调用resize()

myChart.setOption(option)
window.onresize=()=>{
	myChart.resize()
}
//或者
window.onresize=myChart.resize

2)有多个echart

window.addEventLisener(‘resize’,()=>{
	myChart.resize()
})

3、点击echarts后更改颜色

定义一个变量保存点击时的变量,点击echarts后重新渲染echarts

data(){
	return{
		clickValue:'',
		myChart:{}
	}
},
mounted(){
	this.myChart=this.$echarts.iinit(this.$refs.myChart)
	this.createEcharts()
},
methods:{
	createEcharts(){
		let xData=[];
		let yData=[];
		let myClickValue=this.clickValue
		let option={
			xAxis:{
				type:'category',
				data:xData
			},
			yAxis:{
				type:'value'
			},
			series:[
				{
					data:yData,
					type:line,
					smmoth:true,
					itemStyle:{
						normal:{
							color:function(params){
								//逻辑处理
								if(params.name==this.myClickValue){return 'red'}
								else{
									return 'green'
								}
							}
						}
					}
				}
			]
		}
	}
	this.myChart.setOption(option)
	this.myChart.on('click',param=>{
		this.clickValue=param.name
		this.createEcharts()
	})
}

4、解决树形图兄弟节点重叠

参考文章

data(){
	return{
		myChart:null
	}
},
init(){
	this.myChart=this.$echarts.init(this.$refs.myChart)
	let option={
		width:chartWidth,
		height:chartHeight
	}
},
resize(){
	/**
	* 以纵向树形图为例
	* 如果是横向属性图,交换chartHeight和chartWidth即可
	*/
	let elesArr = Array.from(new Set(this.myChart._chartsViews[0]._data._graphicEls));
	let dep=this.myChart._chartsViews[0]._data.tree.root.height;//获取树高
	let layer_height=100;// 纵向-层级之间的高度;横向-层级之间的宽度
	let currentHeight = layer_height * (dep+1) || layer_height;
	let newHeight = Math.max(currentHeight, layer_height);
	this.chartHeight=newHeight+'px';//横向-可把chartHeight写成chartWidth
	let layer_width = 100; // 兄弟节点之间的距离
	let currentWidth = layer_width * (elesArr.length - 1) || layer_width;
	let newWidth = Math.max(currentWidth, layer_width);
	this.chartWidth=newWidth+'px';//横向-可把chartWidth写成chartHeight
	this.myChart.resize();
 }

5、使用v-if时echarts不渲染

参考文章

使用$nextTick()回调echarts函数

6、ECharts调节节点大小以及线条粗细

参考文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值