vue3+vite中配置echarts自定义主题

本文介绍在Vue3项目中使用ECharts5自定义主题的方法,包括JS配置及JSON配置的方式,并解决了引入顺序及配置生效的问题。

最近在撸vue3工程,里面用到了echarts5.3,要用自定义主题的时候我整个人都不好了,按照官方的说明有两种配置方式,一种是使用js配置,一种是使用json配置,按照下面的步骤来配置就行了:

JS引入:

JSON引入:


但实际上试了两种引入方式都不行,先说JS版本的引入方式存在的问题:下面这段代码是我下载的自定义主题的customed.js文件,如果你在html引入这个script文件,会得到一个“ECharts is not Loaded”的结果,你看network的资源加载情况就会发现customed.js先于echarts完成加载。

(function (root, factory) {

if (typeof define === "function" && define.amd) {

// AMD. Register as an anonymous module.

define(["exports", "echarts"], factory);

} else if (

typeof exports === "object" &&

typeof exports.nodeName !== "string"

) {

// CommonJS

factory(exports, require("echarts"));

} else {

// Browser globals

factory({}, root.echarts);

}

})(this, function (exports, echarts) {

.......

})

怎么办? 两手一摊,vite+vue3。。。

第一步:在main.js主入口文件添加以下代码:

import * as echarts from "echarts";

window.echarts = echarts;

//使用import()异步加载文件

import("@/assets/customed.js");

 第二步:使用import导入文件意味着执行customed.js的root传入的this会导致undefined,所以需要把传入的this修改为window,这样就可以搞定了。

(function (root, factory) {

.......

})(window, function (exports, echarts) {

//上面这行this修改为window

.......

})

 第二种JSON格式导入的,按道理像这样引入就行了:

//main.js使用

import * as echarts from "echarts";

import themeJSON from "@/assets/customed.project.json";

echarts.registerTheme("customed", themeJSON)

//xx.vue

myChart = echarts.init(document.getElementById("year-saling"),"customed");

但是实际上这种效果不生效,有人说是json内容改了,于是我把cusomed.js里面那段样式配置代码copy替换掉整个json文件,格式化为json一下,重新运行程序,就OK了。吐血,总结来说还是两种方式都不方便,怎么都要修改文件,大家看看怎么方便怎么来吧。

(function (root, factory) {

if (typeof define === "function" && define.amd) {

// AMD. Register as an anonymous module.

define(["exports", "echarts"], factory);

} else if (

typeof exports === "object" &&

typeof exports.nodeName !== "string"

) {

// CommonJS

factory(exports, require("echarts"));

} else {

// Browser globals

factory({}, root.echarts);

}

})(window, function (exports, echarts) {

var log = function (msg) {

if (typeof console !== "undefined") {

console && console.error && console.error(msg);

}

};

if (!echarts) {

log("ECharts is not Loaded");

return;

}

//copy下面的样式配置

echarts.registerTheme("customed", {样式配置})

........

### 基于 UniApp 和 Vue3 的项目中引入并配置 ECharts #### 配置 Vite 和 TypeScript 环境 为了在基于 UniApp 和 Vue3 的项目中正确引入和配置 ECharts,首先需要确保项目的开发环境已经支持 Vite 和 TypeScript。以下是具体的实现方法: 1. **安装依赖项** 使用 npm 或 yarn 安装必要的依赖包,包括 `echarts` 及其适配器库 `echarts-for-weixin`(如果目标平台涉及微信小程序)。 ```bash npm install echarts @types/echarts --save ``` 2. **修改 tsconfig.json 文件** 在项目的根目录下找到 `tsconfig.json` 文件,并确认已启用以下选项以支持 TypeScript 类型检查: ```json { "compilerOptions": { "strict": true, "esModuleInterop": true, "moduleResolution": "node", "target": "esnext" } } ``` 3. **Vite 配置调整** 如果使用的是 Vite 构建工具,则需编辑 `vite.config.ts` 文件来加载自定义插件或扩展路径解析功能。例如: ```typescript import { defineConfig } from &#39;vite&#39;; import uni from &#39;@dcloudio/vite-plugin-uni&#39;; export default defineConfig({ plugins: [uni()], resolve: { alias: [ { find: &#39;@/components&#39;, replacement: &#39;/src/components&#39; }, ], }, }); ``` --- #### 引入 ECharts 到组件中 通过脚本标签导入方式或者按需加载的方式可以减少打包体积。 1. **全局注册 ECharts** 将 ECharts 注册到应用实例上以便任何地方都能访问它。 ```javascript // main.ts 中添加如下代码 import * as echarts from &#39;echarts/core&#39;; import { CanvasRenderer } from &#39;echarts/renderers&#39;; // 渲染器 import { LineChart, BarChart } from &#39;echarts/charts&#39;; // 图表类型 import { TitleComponent, TooltipComponent, GridComponent, } from &#39;echarts/components&#39;; // 组件模块 echarts.use([ CanvasRenderer, LineChart, BarChart, TitleComponent, TooltipComponent, GridComponent, ]); window.echarts = echarts; ``` 2. **局部使用 ECharts** 对单个页面单独初始化图表数据源及样式设置。 ```vue <!-- App.vue --> <template> <view class="container"> <canvas id="myChart"></canvas> </view> </template> <script setup lang="ts"> import { onMounted } from &#39;vue&#39;; const initEchart = () => { const chartDom = document.getElementById(&#39;myChart&#39;); if (!chartDom) return; const myChart = echarts.init(chartDom); const option = { title: { text: &#39;示例折线图&#39;, }, tooltip: {}, xAxis: { data: [&#39;Mon&#39;, &#39;Tue&#39;, &#39;Wed&#39;, &#39;Thu&#39;, &#39;Fri&#39;], }, yAxis: {}, series: [{ name: &#39;销量&#39;, type: &#39;line&#39;, data: [80, 90, 75, 60, 85], }], }; myChart.setOption(option); // 应用配置参数 }; onMounted(() => { initEchart(); }); </script> <style scoped> .container { width: 100%; height: 400px; } canvas { display: block; margin: auto; background-color: #fff; } </style> ``` 上述代码展示了如何利用 Vue3 Composition API 结合 TypeScript 初始化一个简单的折线图[^1]。 --- #### 注意事项 当运行多端编译时需要注意不同平台对于 DOM 节点操作的支持程度差异较大,在某些场景可能需要额外处理兼容逻辑。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值