Highcharts 在Vue3 TS 引入

前沿

在vue3 中引入 Highcharts

但是在你要是这么引入的话最新的版本 Highcharts

 然后就在 main.ts下引入就会报错

 

// Use the HighchartsVue plugin, register <highcharts> component
// @ts-ignore
app.use(Highcharts)

这么写虽然不会报错,但是还是无法在页面里面使用

 

然后查阅和自己研究了

提供了3种方案 可以在在Vue3 TS中可以引入 Highcharts 方案

第一种

 

在types 目录下, 新建  extends.d.ts 

输入

/// <reference types="../../node_modules/highcharts" />

解释:

如果指定了--noResolve编译选项,三斜线引用会被忽略;它们不会增加新文件,也不会改变给定文件的顺序。
/// <reference types="..." />
与 /// <reference path="..." />指令相似,这个指令是用来声明 依赖的; 一个 /// <reference types="..." />指令则声明了对某个包的依赖。

然后在 runtime 下新建一个highchart.ts 文件

写入

import Highcharts from 'highcharts';
export default Highcharts;

这样 在你使用的页面里面引入就OK了

import Highcharts from "@/runtime/highchart";
    dayChart = Highcharts.chart('dayChart', {
        accessibility: {
            enabled: false
        },
        chart: {
            zoomType: 'xy',
            type: "column",
        },
        title: {
            text: '杭州月平均温度和降雨量'
        },
        subtitle: {
            // text: '数据来源: WorldClimate.com'
        },
        xAxis: [{
            // categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
            //     'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
            // crosshair: true,
            categories: [],
            allowDecimals: false, //不允许小数
            type: "category", //自定义X坐标类别
            showEmpty: false,
        }],
        yAxis: [{ // Primary yAxis
            labels: {
                format: '{value}°C',
                style: {
                    color: Highcharts.getOptions().colors[1]
                }
            },
            title: {
                enabled: false,
                text: '温度',
                style: {
                    color: Highcharts.getOptions().colors[1]
                }
            }
        }, { // Secondary yAxis
            title: {
                enabled: false,
                text: '降雨量',
                style: {
                    color: Highcharts.getOptions().colors[0]
                }
            },
            labels: {
                format: '{value} mm',
                style: {
                    color: Highcharts.getOptions().colors[0]
                }
            },
            opposite: true
        }],
        tooltip: {
            split: true,
            shared: true
        },
        legend: {
            layout: 'vertical',
            align: 'left',
            x: 120,
            verticalAlign: 'top',
            y: 100,
            floating: true,
            backgroundColor: (Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#FFFFFF'
        },
        series: [{
            name: '降雨量',
            type: 'column',
            yAxis: 1,
            data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4],
            tooltip: {
                valueSuffix: ' mm'
            }
        }, 
        {
            name: '温度',
            type: 'spline',
            data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6],
            tooltip: {
                valueSuffix: '°C'
            }
        }]
    });
View Code

这样 就能在图表中引入

 

第二种:

就是注册全局的方法  app.config.globalProperties 的方法

import Highcharts from "highcharts";
import MapsModule from "highcharts/modules/map";
import StockModule from "highcharts/modules/stock";
import GanttModule from "highcharts/modules/gantt";

// In order to use Highcharts Maps we need to
// wrap Highcharts with the correct module:
MapsModule(Highcharts);
StockModule(Highcharts)
GanttModule(Highcharts);

// Use the HighchartsVue plugin, register <highcharts> component
// @ts-ignore
app.use(Highcharts)

app.config.globalProperties.highcharts = Highcharts;
window.highcharts = Highcharts;

 然后调用 window 下的 方法直接只用

console.log(proxy.isEnglish)
console.log(window.highcharts)

OK 

第3种 

就是在你的chart 文件下单独引入 这个包 也不会报错 就可以了

import Highcharts from 'highcharts/es-modules/masters/highcharts.src.js';
import 'highcharts/es-modules/masters/highcharts-more.src.js';
import 'highcharts/es-modules/masters/modules/boost.src.js';
import 'highcharts/es-modules/masters/modules/no-data-to-display.src.js';

 

推荐第三种, 因为这很好用

然后会报 黄色警告,然后在charts 下引入这个 (在你使用的图表下引入)

 accessibility: {
      enabled: false
 }

 

然后使用了 

rollup-plugin-visualizer  分析
 
plugins: [vue(),
  visualizer({
    emitFile: true,
    filename: 'stats.html',
    open: true,
    // gzipSize: true,
    // brotliSize: true,
  })
  ],

第一种是 按照引入

包的大小

62.77%. 272.74KB 很大

 第三种引入的方式 的大小

 就155.1 少了一半

 

那显然易见了 , 真的就第三种 ,然后就OK了

 

posted @ 2024-02-04 16:02  -鹿-  阅读(654)  评论(0编辑  收藏  举报