Skip to content

Nuxt 3 实战指南

Nuxt 3 是一个基于 Vue 3 的全栈框架,提供了服务端渲染(SSR)、静态站点生成(SSG)等能力,让 Vue 开发更加高效。

官方文档Nuxt 3 文档

推荐解决方案

方案说明链接
nuxt3-awesome-starter功能完善的 Nuxt 3 启动模板GitHub

ECharts 5.x 集成

在 Nuxt 3 项目中集成 ECharts 5.x 实现数据可视化。

  • "echarts": "^5.5.1"
  • "nuxt": "^3.8.0"
  • 中国地图数据快速下载链接地址

步骤 1:创建插件

plugins 目录下创建 ECharts 插件文件:

ts
// plugins/echarts.client.ts
import * as echarts from "echarts";

export default defineNuxtPlugin((nuxtApp) => {
  return {
    provide: {
      eChart: echarts,
    },
  };
});

客户端插件

文件名中的 .client.ts 后缀表示该插件只在客户端运行,避免服务端渲染时报错。

步骤 2:组件中使用

vue
<template>
  <div class="map-container">
    <div ref="chinaMap" class="map-chart" />
  </div>
</template>
vue
<script setup>
// 中国地图数据(可从文档附件下载)
import china from "./assets/mapJson.json";

// 通过插件注入的 ECharts 实例
const { $eChart } = useNuxtApp();

const chinaMap = ref(null);

onMounted(() => {
  // 注册中国地图
  $eChart.registerMap('CHINA', china);
  
  // 初始化图表
  const myChart = $eChart.init(chinaMap.value);
  
  // 图表配置
  const option = {
    title: {
      text: '中国地图',
      subtext: '数据可视化分布图',
      left: 'center',
    },
    tooltip: {
      trigger: 'item',
    },
    series: [
      {
        name: '数据分布',
        type: 'map',
        map: 'CHINA',
        roam: true, // 支持缩放和平移
        emphasis: {
          label: { show: true },
          itemStyle: {
            areaColor: '#ffd700',
          },
        },
        data: [],
      },
    ],
  };

  myChart.setOption(option);
  
  // 响应式处理
  window.addEventListener('resize', () => {
    myChart.resize();
  });
});
</script>

<style scoped>
.map-container {
  width: 100%;
  height: 600px;
}
.map-chart {
  width: 100%;
  height: 100%;
}
</style>

山与海都很美,努力走出去