vue3中使用echart的两种引入方式,以及需要注意的事项。

 创建好vue3项目后安装echarts

终端输入:

npm i echarts --save

安装好后:

1.直接在组件中引用echarts

<script setup>

        import * as echarts from 'echarts'  

</script>

2.全局引入,一般在app.vue

app.vue  (provide 和 inject的使用)

<script setup>

        import * as echarts from 'echarts'  

        provide('echarts',echarts)

</script>

在需要用echarts的组件中用inject获取

<script setup>

        const echarts  = inject('echarts')

</script>

注意!!!vue挂载 、echarts渲染 、数据获取三者的时间顺序

1.先讲vue挂载和echarts渲染

拿挂网的入门例子来说。(vue3 版本)

<script setup>

import * as echarts from 'echarts';

const myCharts = ref(null)

// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(mycharts.value);
// 绘制图表
myChart.setOption({
  title: {
    text: 'ECharts 入门示例'
  },
  tooltip: {},
  xAxis: {
    data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
  },
  yAxis: {},
  series: [
    {
      name: '销量',
      type: 'bar',
      data: [5, 20, 36, 10, 10, 20]
    }
  ]
});

<script>

开始我是这么写的,开起来好像没有问题。但是你一打开页面就会发现数据没有渲染上去。因为此时vue还没有挂载到dom元素上去,所以获取不到dom元素,数据当然不能渲染。

需要这么写,把获取dom元素和初始化myecharts的动作放到onMounted(()=>{})中

<script setup>

import * as echarts from 'echarts';

onMounted(()=>{

const myCharts = ref(null)

// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(mycharts.value);
// 绘制图表
myChart.setOption({
  title: {
    text: 'ECharts 入门示例'
  },
  tooltip: {},
  xAxis: {
    data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
  },
  yAxis: {},
  series: [
    {
      name: '销量',
      type: 'bar',
      data: [5, 20, 36, 10, 10, 20]
    }
  ]
});

})

<script>

vue3:你可以通过在生命周期钩子前面加上 “on” 来访问组件的生命周期钩子。

我在<script setup>上加了setup,就等于在setup内部.

下表包含如何在 setup () 内部调用生命周期钩子:

选项式 APIHook inside setup
beforeCreateNot needed*
createdNot needed*
beforeMountonBeforeMount
mountedonMounted
beforeUpdateonBeforeUpdate
updatedonUpdated
beforeUnmountonBeforeUnmount
unmountedonUnmounted
errorCapturedonErrorCaptured
renderTrackedonRenderTracked
renderTriggeredonRenderTriggered
activatedonActivated
deactivatedonDeactivated

TIP

因为 setup 是围绕 beforeCreate 和 created 生命周期钩子运行的,所以不需要显式地定义它们。换句话说,在这些钩子中编写的任何代码都应该直接在 setup 函数中编写。

这些函数接受一个回调函数,当钩子被组件调用时将会被执行:

// MyBook.vue

export default {
  setup() {
    // mounted
    onMounted(() => {
      console.log('Component is mounted!')
    })
  }
}

2.echarts渲染和数据获取

通过axios获取数据然后通过echarts渲染到页面

如果是用的异步请求就要非常注意了!

简单介绍一下异步请求:异步请求在执行过程中是不会影响后面程序执行的,好比如在主线程开辟了一个子线程。

如过异步获取数据,还在获取中,echart已经把dom元素渲染了,但是i请求的数据还没返回回来,此时渲染的就是空数据。

所以用异步请求,可以把echart渲染和初始化放到axios.then()里面,这样就不会出现渲染空数据了。

如下面:

<script setup>

import api from '@/api/index'

var keydata = []

var valuedata = []

const resdata = []

const wordsChartsBox = ref(null)

const echarts = inject('echarts')

function getf() {

    api.get('/backstage').then(res => {

        for (const key in res.data) {

            var element = res.data[key]

            if (key == 1) {

                keydata = element

            } else {

                valuedata = element

            }

        }

        for (let index = 0; index < keydata.length; index++) {

            resdata.push(

                {

                    value: parseInt(valuedata[index]),

                    name: keydata[index]

                }

            )

        }

        const wordsChartsOption = {

            title: {

                text: '常用词统计',

                subtext: '通过常用词统计分析盲人需求',

                left: 'center'

            },

            tooltip: {

                trigger: 'item',

                formatter: '{a} <br/>{b} : {c} ({d}%)'

            },

            legend: {

                type: 'scroll',

                orient: 'vertical',

                right: 10,

                top: 20,

                bottom: 20,

                data: keydata

            },

            series: [

                {

                    name: '姓名',

                    type: 'pie',

                    radius: '55%',

                    center: ['40%', '50%'],

                    data: resdata,

                    emphasis: {

                        itemStyle: {

                            shadowBlur: 10,

                            shadowOffsetX: 0,

                            shadowColor: 'rgba(0, 0, 0, 0.5)'

                        }

                    }

                }

            ]

        }

        const wordsCharts = echarts.init(wordsChartsBox.value)

        wordsCharts.setOption(wordsChartsOption)

    })

    console.log(resdata)

}

onMounted(() => {

    getf()

})

</script>

<think>好的,我现在需要帮助用户解决在Vue项目中使用ECharts的问题。根据用户提供的引用内容,我需要整理出一个清晰的步骤指南,并确保符合用户的要求,比如正确使用LaTeX格式、生成相关问题等。 首先,用户的问题是如何在Vue中集成和使用ECharts。根据引用内容,主要有几个步骤:安装依赖、全局引入或在组件中引入、创建DOM容器、初始化图表、配置选项。我需要将这些步骤详细说明,确保每一步都清晰易懂。 然后,我要检查是否有遗漏的细节。比如,引用1提到在main.js中全局引入,而引用2和3则是在组件中局部引入。可能需要说明两种方式的区别和适用场景,这样用户可以根据需要选择。 接下来,关于代码示例,需要确保语法正确,并且注释明确。比如,如何在mounted生命周期钩子中初始化图表,如何通过ref获取DOM元素,以及如何设置options配置项。同时,要注意在销毁组件时调用dispose方法防止内存泄漏,这一点在引用2中有提到,可能需要补充到步骤中。 另外,用户要求生成相关问题,我需要根据内容提出几个相关的问题,比如性能优化、动态数据更新、与后端API的集成等,这些问题应该对进一步学习有帮助。 还要注意LaTeX的使用,虽然问题主要涉及代码,但如果有数学表达式的地方需要正确应用格式,比如在可能的性能分析部分,但目前看来内容中可能较少涉及数学公式,但需要留意。 最后,确保引用标识正确添加到对应的步骤末尾,例如引用1、2、3分别对应不同的步骤,比如安装依赖、初始化图表、配置选项等地方。 现在需要组织这些信息,确保结构清晰,步骤明确,代码示例正确,并且相关问题相关性强。同时,检查是否所有引用都被正确引用,没有遗漏。</think>### 如何在 Vue使用 ECharts 示例教程 以下是分步实现方法,包含两种引入方式(全局引入与组件内引入),并附带完整代码示例: --- #### **一、安装 ECharts 依赖** 通过 npm 或 yarn 安装: ```bash npm install echarts --save # 推荐方式[^1] # 或使用淘宝镜像加速 cnpm install echarts --save ``` --- #### **二、引入 ECharts** ##### **方式1:全局引入(适合多组件复用)** 在 `main.js` 中添加: ```javascript import echarts from &#39;echarts&#39; Vue.prototype.$echarts = echarts // 挂载到 Vue 原型链[^1] ``` ##### **方式2:组件内引入(推荐模块化开发)** 在 Vue 组件中按需引入: ```javascript import * as echarts from &#39;echarts&#39; // 仅引入所需模块[^2] ``` --- #### **三、创建图表容器** 在模板中定义固定宽高的容器: ```html <template> <div> <div ref="chartContainer" style="width: 600px; height: 400px;"></div> </div> </template> ``` > **注意**:必须通过 CSS 或行内样式指定容器的宽高,否则图表无法渲染[^2]。 --- #### **四、初始化图表** 在 `mounted` 生命周期中初始化,并通过 `ref` 绑定容器: ```javascript export default { data() { return { chartInstance: null // 存储图表实例 } }, mounted() { this.initChart() }, methods: { initChart() { const container = this.$refs.chartContainer this.chartInstance = echarts.init(container) // 初始化[^2] // 配置数据(示例:柱状图) const options = { title: { text: &#39;销售数据统计&#39; }, tooltip: {}, xAxis: { data: [&#39;品类A&#39;, &#39;品类B&#39;, &#39;品类C&#39;] }, yAxis: {}, series: [{ type: &#39;bar&#39;, data: [120, 200, 150] }] } this.chartInstance.setOption(options) // 渲染图表[^3] } }, beforeDestroy() { if (this.chartInstance) { this.chartInstance.dispose() // 销毁实例避免内存泄漏[^2] } } } ``` --- #### **五、动态更新数据** 通过接口获取数据并更新图表: ```javascript async fetchData() { const response = await axios.get(&#39;/api/sales-data&#39;) const newData = response.data this.chartInstance.setOption({ series: [{ data: newData }] }) } ``` --- #### **六、高级功能示例** ##### **响应式布局** 监听窗口变化自动调整图表: ```javascript window.addEventListener(&#39;resize&#39;, () => { this.chartInstance.resize() }) ``` ##### **主题定制** 使用官方主题或自定义: ```javascript import &#39;echarts/theme/dark&#39; // 引入暗黑主题 echarts.init(container, &#39;dark&#39;) // 应用主题[^3] ``` --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NoBug.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值