背景
- 需要
自适应大小
- 需要
loading
加载。 - 效果如下
echarts
加载完成事件API
1、events. rendered
- 官方介绍
2、events. finished
执行
- 在vue中
template
<div class="p-line-charts-out">
<div v-show="!isLoading" class="p-line-charts" ref="lineCharts"></div> <!--图表dom对象-->
<dv-loading v-show="isLoading">Loading...</dv-loading> <!--loading组件-->
</div>
javascript
//渲染前
this.isLoading = true
this.chart = this.$echarts.init(this.$refs.lineCharts)
//渲染后
this.chart.on('finished',_=>{
this.isLoading = true
console.log(113, 'finished')
})
scss
<style lang="scss" scoped>
.p-line-charts-out{
height: 100%;
width: 100%;
.p-line-charts {
width: 100%!important;
height: calc(100% - 25px)!important;
}
}
</style>
- 但是
finished
事件有个问题,就是悬浮,点击事件也会触发钩子函数
解决方法-1
const option = {...} //charts配置项
let isFinished = false //标记 isFinished
this.chart.on('finished',_=>{
if(!isFinished){
console.log('我只执行一次')
isFinished = true
this.isLoading = false //关闭loading
this.chart.resize() //重新渲染charts大小
}
console.log(113, 'finished')
})
this.chart.setOption(option)
解决方法-2
const chartsPromise = new Promise(resolve => {
const option = {...} //echarts配置
this.chart = this.$echarts.init(this.$refs.lineCharts)
this.chart.on('finished',_=>{
resolve() //把执行结果抛出去
})
this.chart.setOption(option)
})
//promise resolve
chartsPromise.then(_=>{
this.isLoading = false//Loading标识关闭
setTimeout(_=>{
this.chart.resize() //宏任务队列中切换echarts大小
})
console.log('渲染完成promise')
})
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!