vue中主页面 el-dialog中包含echarts,数据不显示问题

本文探讨了在Vue.js中,如何解决在弹出层el-dialog中,由于使用id而非ref获取echarts对应div导致的图表加载失败问题。关键在于使用ref初始化echarts实例并设置选项。解决方法包括确保div使用ref='mychart',并通过this.$echarts.init进行操作。

问题:主页面,点击按钮,打开el-dialog时,出现el-dialog中的echarts不能正常显示;

解决方法:

1、echarts对应的div,要使用ref=‘mychart’;

2、调用:let thechart = this.$echarts.init(this.$refs.mychart);

然后thechart.setOption(myoption);

通过该方案即可解决不加载的问题;

我遇到的问题是:echart对应的div;通过id获取dom的方式,未能识别造成el-dialog不能正常加载echarts的问题;

贴图:echarts对应部分;

el-dialog部分:

上图红色部分对应自定义组件(包含echarts对应的div) ;

上图为子组件对应的echarts部分,注意要使用ref方式; 

<template> <h2>用户画像数据</h2> <ul> <li><strong>用户名:</strong>{{ profile.username }}</li> <li><strong>学习风格:</strong>{{ profile.learningStyleDisplayName }}</li> <li><strong>学习目标:</strong>{{ profile.learningGoal }}</li> <li><strong>学习偏好:</strong>{{ profile.learningPreference }}</li> <li> <strong>兴趣标签:</strong> <ul> <li v-for="tag in profile.interestTags" :key="tag.id"> {{ tag.name }} </li> </ul> </li> </ul> <div class="chart-container"> <h3>能力分布</h3> <div id="radar-chart" style="width: 600px; height: 400px;"></div> </div> <el-button plain @click="centerDialogVisible = true"> 用户画像设置 </el-button> <el-dialog v-model="centerDialogVisible" title="用户画像设置" width="500" align-center > <el-form :model="profile" :rules="rules" ref="formRef" label-width="100px"> <el-form-item label="逻辑能力:" prop="logicalAbility"> <el-input-number v-model="profile.logicalAbility" :min="0" :max="100" ></el-input-number> </el-form-item> <el-form-item label="语言能力:" prop="verbalAbility"> <el-input-number v-model="profile.verbalAbility" :min="0" :max="100" ></el-input-number> </el-form-item> <el-form-item label="抽象能力:" prop="abstractAbility"> <el-input-number v-model="profile.abstractAbility" :min="0" :max="100" ></el-input-number> </el-form-item> <el-form-item label="记忆力:" prop="memoryAbility"> <el-input-number v-model="profile.memoryAbility" :min="0" :max="100" ></el-input-number> </el-form-item> <el-form-item label="专注力:" prop="concentrationAbility"> <el-input-number v-model="profile.concentrationAbility" :min="0" :max="100" ></el-input-number> </el-form-item> </el-form> <template #footer> <div class="dialog-footer"> <el-button @click="handleCancel">取消</el-button> <el-button type="primary" @click="handleSubmit">保存修改</el-button> </div> </template> </el-dialog> </template> <script setup> import { onMounted, ref } from "vue"; import request from "../../utils/request"; import * as echarts from "echarts"; // 引入 ECharts const profile = ref({}); const account = ref({}); const interests = ref([]); const currentSection = ref("profile"); const centerDialogVisible = ref(false); const handleCancel = () => { centerDialogVisible.value = false; }; const handleSubmit = async () => { centerDialogVisible.value = false; console.log("用户画像数据:" + JSON.stringify(profile.value)); }; const getProfile = async () => { profile.value = await request.get("/student-profiles/me"); console.log("用户画像数据:" + JSON.stringify(profile.value)); initRadarChart(); // 初始化雷达图 }; onMounted(() => { getProfile(); }); // 初始化雷达图 const initRadarChart = () => { const chartDom = document.getElementById("radar-chart"); const myChart = echarts.init(chartDom); const option = { radar: { indicator: [ { name: "逻辑能力", max: 5 }, { name: "语言能力", max: 5 }, { name: "抽象能力", max: 5 }, { name: "记忆力", max: 5 }, { name: "专注力", max: 5 }, ], }, series: [ { type: "radar", data: [ { value: [ profile.value.logicalAbility, profile.value.verbalAbility, profile.value.abstractAbility, profile.value.memoryAbility, profile.value.concentrationAbility, ], name: "能力分布", }, ], }, ], }; myChart.setOption(option); }; const selectSection = (section) => { currentSection.value = section; }; const handleEdit = () => { console.log("编辑按钮被点击"); }; </script> <style scoped> .container { display: flex; } .sidebar { width: 200px; padding: 10px; border-right: 1px solid #ccc; } .sidebar ul { list-style-type: none; padding: 0; } .sidebar li { cursor: pointer; padding: 8px 12px; margin: 5px 0; border-radius: 4px; background-color: #f9f9f9; } .sidebar li:hover { background-color: #eaeaea; } .sidebar li.active { background-color: #42b983; color: white; } .content { flex-grow: 1; padding: 10px; } ul { list-style-type: none; padding: 0; } li { margin: 5px 0; } .chart-container { margin-bottom: 20px; } </style>对页面进行美化
最新发布
05-28
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值