vue中使用dialog弹框,echarts图表不显示的解决方案

通过 npm 安装 ECharts后,开始使用

出现问题:在dialog中弹框中,echarts图表一直显示为空,使用了网上教程的nextTick方法,但控制台报错“ Error in nextTick: "TypeError: Cannot read property 'getAttribute' of null”

解决方法:(1)在HTML的dialog中使用“ @open="open()"”方法,如下所示:

<el-dialog title="新建" 
   :modal-append-to-body='false'
   :visible.sync="newDialogFormVisible" 
    @open="open()"
    append-to-body>
    <el-form :inline="true" size="medium" label-width="80px">
       <el-row :gutter="10">
          <el-col :xs="24" :sm="24" :md="24" :lg="22" style="text-align:right">
             <el-button type="primary" size="small">确定</el-button>
          </el-col>
          <el-col :xs="24" :sm="24" :md="24" :lg="24">
            <el-form-item label="样本曲线">
              <div id="newEcharts" style="width:500px;height:400px;padding-top:40px"></div>
             </el-form-item>
           </el-col>
         </el-row>
     </el-form>        
</el-dialog>

(2)在script中写法如下:

<script>
   export default {
    data() {
      return {
        newVisible: false,
        newDialogFormVisible: false,
       
      };
    },
    methods: {
      // 创建方法
      initEcharts() {
        var echarts = require('echarts');

        // 基于准备好的dom,初始化echarts实例
        const myChart = this.$echarts.init(document.getElementById('newEcharts'));
        // 绘制图表
         const option = {
            title: {
                text: 'ECharts 入门示例'
            },
            tooltip: {},
            xAxis: {
                data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
            },
            yAxis: {},
            series: [{
                name: '销量',
                type: 'bar',
                data: [5, 20, 36, 10, 10, 20]
            }]
        };
        myChart.setOption(option)
      },
      open(){
        this.$nextTick(() => {
        //  执行echarts方法
          this.initEcharts()
        })
      }
    },
  }
</script>

 

效果如下:

Vue 3,如果你使用Dialog弹窗展示ECharts图表,并且想要在数据更新时刷新图表内容,可能会遇到一些挑战。由于ECharts是基于JavaScript的数据可视化库,而Vue的数据绑定并不直接支持DOM操作,特别是图表这类动态更新的需求。 当你在Dialog组件内部初始化ECharts实例并渲染图表时,你需要手动处理数据变化和图表刷新。通常的做法是: 1. 数据绑定:确保你在Vue组件里正确地绑定了数据源。当数据发生变化时,通过`this.$set`方法手动触发数据响应,因为ECharts不会自动检测数据的变化。 ```javascript data() { return { chartData: [], // 示例数据 } }, methods: { updateChartData(newData) { this.chartData = newData; this.$set(this, 'chartData', newData); // 触发数据响应 this.updateChart(); // 更新图表方法 }, } ``` 2. 更新图表:编写一个`updateChart`方法,在这个方法里,你可以销毁旧的图表实例,然后重新创建新的实例,并传入最新的数据。 ```javascript methods: { updateChart() { if (this.myChart) { // 如果已有图表实例 this.myChart.dispose(); // 销毁旧图表 } const myChart = echarts.init(document.getElementById('myChart')); // 初始化新图表 myChart.setOption({ data: this.chartData, }); } } ``` 3. 弹窗显示和隐藏:确保在Dialog显示和隐藏事件,适当地切换图表是否需要刷新。例如: ```javascript methods: { showDialog() { this.dialogVisible = true; // 显示对话框 this.updateChart(); }, hideDialog() { this.dialogVisible = false; // 隐藏对话框 }, } ``` 记得在Dialog的模板里监听数据源的变化,以及`showDialog`和`hideDialog`方法的调用。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值