vue+echarts实现数据实时更新

本文实例为大家分享了vue+echarts实现数据实时更新的具体代码,供大家参考,具体内容如下

今天在管理后台新增一个图表,用了echarts,记录一下

根据数据实时更新

安装

npm install echarts --save

然后在main.js中配置一下

import echarts from 'echarts'
Vue.prototype.$echarts = echarts

可以了,接下来就是在你需要用的页面写了

// html 宽高还是尽量固定吧,不然会出现一些奇奇怪怪的问题
<div id="previewChart" :style="{width: '600px', height: '600px'}"></div>
data () {
    return {
        echartUser: '',
        echartRegistered: '',
        echartOnline: '',
    }
}
// js
// 这个是一个漏斗图
 drawLine () {
       let previewChart = this.$echarts.init(document.getElementById('previewChart'))
       previewChart.setOption({
           color: ['#4f8f98', '#233541', '#b32124'],
           title: { text: '漏斗图' },
           tooltip: {
               trigger: 'item',
               formatter: "{a} <br/>{b} : {c}人"
           },
           toolbox: {
               feature: {
                   dataView: {readOnly: false},
                   restore: {},
                   saveAsImage: {}
               }
           },
           series: [
               {
                   name:'数据统计',
                   type:'funnel',
                   left: '10%',
                   top: 60,
                   //x2: 80,
                   bottom: 60,
                   width: '80%',
                   // height: {totalHeight} - y - y2,
                   min: 0,
                   max: 100,
                   minSize: '0%',
                   maxSize: '100%',
                   sort: 'descending',
                   gap: 2,
                   label: {
                       show: true,
                       position: 'inside'
                   },
                   labelLine: {
                       length: 10,
                       lineStyle: {
                           width: 1,
                           type: 'solid'
                       }
                   },
                   itemStyle: {
                       borderColor: '#fff',
                       borderWidth: 1
                   },
                   emphasis: {
                       label: {
                           fontSize: 18
                       }
                   },
                   // 更新数据的时候,更新的是这个位置的数据
                   data: [
                       {value: this.echartUser, name: '用户人数'},
                       {value: this.echartRegistered, name: '注册人数'},
                       {value: this.echartOnline, name: '在线听力测试人数'},
                   ]
               }
           ]
     })
},
// 获取数据
getTable () {
    let startTime = this.searchMsg.startTime
    let endTime = this.searchMsg.endTime
    let channel = ''
    previewList(startTime, endTime, channel).then(resp =>{
        if (resp.errCode == 0) {
            // 在这个位置使用nextTick
            // 漏斗图数据
            this.$nextTick( ()=>{
                this.echartRegistered = resp.data.previewCount.phoneCount
                this.echartUser = resp.data.previewCount.createCount
                this.echartOnline = resp.data.previewCount.testCount
                // 方法一,直接调用前面定义的drawLine()方法,然后给这个方法传参,然后在方法里面吧需要动态改变的地方替换成传参的这个变量达到动态改变数据的目的
                this.drawLine(this.echartRegistered , this.echartUser, this.echartOnline)
                // 方法二 ,最笨的办法,重新写一遍实例化echarts的方法咯 
                let previewChart = this.$echarts.init(document.getElementById('previewChart'))
                previewChart.setOption({
                     series: [{
                        data: [
                           {value: resp.data.previewCount.createCount, name: '用户人数'},
                           {value: resp.data.previewCount.phoneCount, name: '注册人数'},
                           {value: resp.data.previewCount.testCount, name: '在线听力测试人数'},
                        ]
                     }]
                 })
            })
        }else {
            this.$message.error(resp.msg)
        }
    })
},

搞定,这样子就不用在去定义watch方法了,简单粗暴的完成了vue + echrats的数据实时更新。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Vue 普通对象数据更新与 file 对象数据更新

    最近在做一个多图片上传的组件,需求是做到多文件依次上传,并显示上传进度条. 逻辑部分实现了以后,在更新进度条视图的时候出现一点问题:动态计算生产的进度 progress 属性不会自动更新. 原来的代码是这样写的: let files = this.filePicker.files; if(!files.length) { return; } let arr = []; for(let i = 0, len = files.length; i < len; i++) { let item = fi

  • 解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题

    vue +webpack 项目中数据更新后页面没有刷新问题,ie11下,如果GET请求请求相同的URL,默认会使用之前请求来的缓存数据,而不会去请求接口获取最新数据,我用的解决方法是在每个请求发送前,拦截请求并给请求接口的URL后加一个时间戳(new Date().getTime()),这样就保证了每一次请求的URL都不同,ie11就会不断的请求接口而不使用缓存数据. 代码如下 if(config.url.indexOf('?')>-1){ config.url = url + config.u

  • 解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)

    1.问题描述:在echarts弹框中嵌入echarts,在页面数据改变时,echarts视图不更新: 2.解决办法: 数据更新时以为drawLine()函数在updated()里面执行(这种情况之前碰到过),后来发现热更新之后视图更新了,所以跟周期函数没有关系:参考了一下网上的一些资料,发现可以用vue中的watch()函数来监听数据的更新,一旦数据更新了,那么就在watch()函数中调用drawLine()函数,发现视图更新了,完美解决. 补充知识:vue echarts line动态刷新数据

  • 谈谈对vue响应式数据更新的误解

    对于刚接触vue的同学会经常遇到数据更新了但是模板没有更新的问题,下面将结合vue的响应式特性以及异步更新机制分析常见的错误: 异步更新带来的数据响应式误解 异步数据的处理基本是一定会遇到的,处理不好就会遇到数据不更新的问题,但有一种情况是在未正确处理的情况下也能正常更新,这就会造成一种误解,详情如下所示: 模板 <div id="app"> <h2>{{dataObj.text}}</h2> </div> js new Vue({ el

  • 详解vue中的父子传值双向绑定及数据更新问题

    在进行父子组件传值时,用到子组件直接控制父组件中的变量值以及在vue中直接更改对象或者数组的值,视图未发生变化的解决办法,当时完成项目时,一直未找到原因,修改了好久. 1.父子组件传值双向绑定 在传递给子组件中的变量上使用.sync修饰符,就能够实现父子传值的双向绑定 <!-- 父组件 --> <template> <div class="audioCate"> <child :show.sync="showModel" @

  • vue 解决异步数据更新问题

    问题 记录一下出现的问题, 数据翻倍 这是复现问题的代码 data() { return { space: "", allresult: [] }; }, methods: { getmessage() { this.allresult = []; axios .get( "https://gist.githubusercontent.com/xiaolannuoyi/9b0defe4959e71fa97e6096cc4f82ba4/raw/4be939123d488cee7

  • Vue.js中provide/inject实现响应式数据更新的方法示例

    vue.js官方文档:https://cn.vuejs.org/v2/api/#provide-inject 首先假设我们在祖辈时候传入进来是个动态的数据,官方不是说如果你传入了一个可监听的对象,那么其对象还是可响应的么? parent父页面: export default { provide() { return { foo: this.fonnB } }, data(){ return { fonnB: 'old word '} } created() { setTimeout(()=>{

  • vue数据更新UI不刷新显示的解决办法

    vue比较常见的坑就是数据(后台返回)更新了,但是UI界面并没有更新,常见于以下情况: 一.数据为数组时 1.通过数组索引修改数组元素例如: 此时UI数据并不会刷新 2.修改数组长度时: 解决方案: 如果data为JSON数组则如下: 第一个参数为要更新数据的数组,第二个参数为要更新的数组中具体的元素下标,第三个参数为新数据 备注: 数组原型上的方法vue可直接检测到变化:push(),pop(),shift(),unshift(),splice(),sort() 二.数据为对象时: Vue 不

  • 详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结

    如果你发现你自己需要在 Vue 中做一次强制更新,99.9% 的情况,是你在某个地方做错了事. 1. Vue 无法检测实例被创建时不存在于 data 中的 property 原因:由于 Vue 会在初始化实例时对 property 执行 getter/setter 转化,所以 property 必须在 data 对象上存在才能让 Vue 将它转换为响应式的. 场景: var vm = new Vue({ data:{}, // 页面不会变化 template: '<div>{{message}

  • 解决vue keep-alive 数据更新的问题

    在项目中使用<keep-alive>包含<router-view>实现页面缓存,加速页面加载, 同时,这种方式带来一些弊端,请看如下大神解释: *********************************** 当引入keep-alive的时候,页面第一次进入,钩子的触发顺序created-> mounted-> activated,退出时触发deactivated. 当再次进入(前进或者后退)时,只触发activated. ********************

随机推荐