Vue.js+HighCharts實現(xiàn)動態(tài)請求展示時序數(shù)據(jù)
本文實例為大家分享了Vue.js+HighCharts實現(xiàn)動態(tài)請求展示時序數(shù)據(jù)的具體代碼,供大家參考,具體內容如下
<template> ? <el-container> ? ? <el-header> ? ? ? <el-menu :default-active="activeIndex" class="el-menu-header" mode="horizontal" @select="handleSelect"> ? ? ? ? <el-menu-item index="1"><router-link :to="{path: '/yun/index' }">首頁</router-link></el-menu-item> ? ? ? ? <el-menu-item index="2"><router-link :to="{path: '/yun/list' }">服務器列表</router-link></el-menu-item> ? ? ? ? <el-menu-item index="3">控制臺</el-menu-item> ? ? ? ? <el-menu-item index="4">消息中心</el-menu-item> ? ? ? ? <el-menu-item index="5"><router-link :to="{path: '/yun/about' }">關于我們</router-link></el-menu-item> ? ? ? ? <el-menu-item @click="toLogin()" v-if="userName === ''">登錄</el-menu-item> ? ? ? ? <el-menu-item> ? ? ? ? <el-dropdown> ? ? ? ? ? <span class="el-dropdown-link" v-if="userName !== ''"> ? ? ? ? ? ? {{ userName }}<i class="el-icon-arrow-down el-icon--right"></i> ? ? ? ? ? </span> ? ? ? ? ? <el-dropdown-menu slot="dropdown" v-if="userName!==''"> <!-- ? ? ? ? ? ?<el-dropdown-item>登錄</el-dropdown-item>--> ? ? ? ? ? ? <el-dropdown-item @click.native="toLogout">退出</el-dropdown-item> ? ? ? ? ? </el-dropdown-menu> ? ? ? ? </el-dropdown> ? ? ? ? </el-menu-item> ? ? ? </el-menu> ? ? </el-header> ? ? <el-container ?style="height: 620px; border: 1px solid #eee"> ? ? ? <el-aside width="200px"> ? ? ? ? <el-menu ? ? ? ? ? default-active="1" ? ? ? ? ? class="el-menu-vertical-demo" ? ? ? ? ? @open="handleOpen" ? ? ? ? ? @close="handleClose"> ? ? ? ? ? <el-submenu index="1"> ? ? ? ? ? ? <template slot="title"> ? ? ? ? ? ? ? <i class="el-icon-location"></i> ? ? ? ? ? ? ? <span>服務器列表</span> ? ? ? ? ? ? </template> ? ? ? ? ? ? <el-menu-item-group> ? ? ? ? ? ? ? <template slot="title">分組一</template> ? ? ? ? ? ? ? <el-menu-item index="1-1">選項1</el-menu-item> ? ? ? ? ? ? ? <el-menu-item index="1-2">選項2</el-menu-item> ? ? ? ? ? ? </el-menu-item-group> ? ? ? ? ? ? <el-menu-item-group title="分組2"> ? ? ? ? ? ? ? <el-menu-item index="1-3">選項3</el-menu-item> ? ? ? ? ? ? </el-menu-item-group> ? ? ? ? ? ? <el-submenu index="1-4"> ? ? ? ? ? ? ? <template slot="title">選項4</template> ? ? ? ? ? ? ? <el-menu-item index="1-4-1">選項1</el-menu-item> ? ? ? ? ? ? </el-submenu> ? ? ? ? ? </el-submenu> ? ? ? ? ? <el-menu-item index="2"> ? ? ? ? ? ? <i class="el-icon-menu"></i> ? ? ? ? ? ? <span slot="title">導航二</span> ? ? ? ? ? </el-menu-item> ? ? ? ? ? <el-menu-item index="3" disabled> ? ? ? ? ? ? <i class="el-icon-document"></i> ? ? ? ? ? ? <span slot="title">導航三</span> ? ? ? ? ? </el-menu-item> ? ? ? ? ? <el-menu-item index="4"> ? ? ? ? ? ? <i class="el-icon-setting"></i> ? ? ? ? ? ? <span slot="title">導航四</span> ? ? ? ? ? </el-menu-item> ? ? ? ? </el-menu> ? ? ? </el-aside> ? ? ? <el-container> ? ? ? ? <el-main> ? ? ? ? ? <div class="x-bar"> ? ? ? ? ? ? <div :id="id" :option="option"></div> ? ? ? ? ? </div> ? ? ? ? </el-main> <!-- ? ? ? ?<el-footer>--> ? <!-- ? ? ? ?</el-footer>--> ? ? ? </el-container> ? ? </el-container> ? </el-container> </template>
<script> ? ? import { mapMutations } from 'vuex'; ? ? import Vuex from 'vuex' //引入 Vuex ? ? import store from '../store' ? ? import HighCharts from 'highcharts' ? ? export default { ? ? ? ? name: "YunMonitorServerv", ? ? ? ? data() { ? ? ? ? ? return { ? ? ? ? ? ? userName: "", ? ? ? ? ? ? activeIndex: '1', ? ? ? ? ? ? arr: [], ? ? ? ? ? ? chartData: [], ? ? ? ? ? ? username: this.$route.query.data, ? ? ? ? ? ? idForm: { ? ? ? ? ? ? ? id: "1" ? ? ? ? ? ? }, ? ? ? ? ? ? id: 'testtt', ? ? ? ? ? ? option: { ? ? ? ? ? ? ? chart: { ? ? ? ? ? ? ? ? zoomType: 'x' ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? title: { ? ? ? ? ? ? ? ? text: 'cpu.0.percent.active'//表頭文字 ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? subtitle: { ? ? ? ? ? ? ? ? text: document.ontouchstart === undefined ? ? ? ? ? ? ? ? ? ? '鼠標拖動可以進行縮放' : '手勢操作進行縮放' ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? xAxis: { ? ? ? ? ? ? ? ? type: 'datetime', ? ? ? ? ? ? ? ? dateTimeLabelFormats: { ? ? ? ? ? ? ? ? ? millisecond: '%H:%M:%S.%L', ? ? ? ? ? ? ? ? ? second: '%H:%M:%S', ? ? ? ? ? ? ? ? ? minute: '%H:%M', ? ? ? ? ? ? ? ? ? hour: '%H:%M', ? ? ? ? ? ? ? ? ? day: '%m-%d', ? ? ? ? ? ? ? ? ? week: '%m-%d', ? ? ? ? ? ? ? ? ? month: '%Y-%m', ? ? ? ? ? ? ? ? ? year: '%Y' ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? tooltip: { ? ? ? ? ? ? ? ? dateTimeLabelFormats: { ? ? ? ? ? ? ? ? ? millisecond: '%H:%M:%S.%L', ? ? ? ? ? ? ? ? ? second: '%H:%M:%S', ? ? ? ? ? ? ? ? ? minute: '%H:%M', ? ? ? ? ? ? ? ? ? hour: '%H:%M', ? ? ? ? ? ? ? ? ? day: '%Y-%m-%d', ? ? ? ? ? ? ? ? ? week: '%m-%d', ? ? ? ? ? ? ? ? ? month: '%Y-%m', ? ? ? ? ? ? ? ? ? year: '%Y' ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? yAxis: { ? ? ? ? ? ? ? ? title: { ? ? ? ? ? ? ? ? ? text: '使用率' ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? legend: { ? ? ? ? ? ? ? ? enabled: false ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? plotOptions: { ? ? ? ? ? ? ? ? area: { ? ? ? ? ? ? ? ? ? fillColor: { ? ? ? ? ? ? ? ? ? ? linearGradient: { ? ? ? ? ? ? ? ? ? ? ? x1: 0, ? ? ? ? ? ? ? ? ? ? ? y1: 0, ? ? ? ? ? ? ? ? ? ? ? x2: 0, ? ? ? ? ? ? ? ? ? ? ? y2: 1 ? ? ? ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? ? ? ? stops: [ ? ? ? ? ? ? ? ? ? ? ? [0, HighCharts.getOptions().colors[0]], ? ? ? ? ? ? ? ? ? ? ? [1, HighCharts.Color(HighCharts.getOptions().colors[0]).setOpacity(0).get('rgba')] ? ? ? ? ? ? ? ? ? ? ] ? ? ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? ? ? marker: { ? ? ? ? ? ? ? ? ? ? radius: 2 ? ? ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? ? ? lineWidth: 1, ? ? ? ? ? ? ? ? ? states: { ? ? ? ? ? ? ? ? ? ? hover: { ? ? ? ? ? ? ? ? ? ? ? lineWidth: 1 ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? ? ? threshold: null ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? series: [{ ? ? ? ? ? ? ? ? type: 'area', ? ? ? ? ? ? ? ? name: '使用率', ? ? ? ? ? ? ? ? data: [ ? ? ? ? ? ? ? ? ? ] ? ? ? ? ? ? ? }] ? ? ? ? ? ? } ? ? ? ? ? } ? ? ? ? }, ? ? ? ? created() { ? ? ? ? }, ? ? ? ? mounted() { ? ? ? ? ? this.showCharts(); ? ? ? ? }, ? ? ? ? methods: { ? ? ? ? ? ...mapMutations(['changeLogin']), ? ? ? ? ? toLogout() { ? ? ? ? ? ? localStorage.removeItem('Authorization'); ? ? ? ? ? ? localStorage.removeItem('Username'); ? ? ? ? ? ? this.$router.push( ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? path: "/yun/login", ? ? ? ? ? ? ? } ? ? ? ? ? ? ) ? ? ? ? ? }, ? ? ? ? ? toLogin() { ? ? ? ? ? ? this.$router.push( ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? path: "/yun/login", ? ? ? ? ? ? ? } ? ? ? ? ? ? ) ? ? ? ? ? }, ? ? ? ? ? showCharts() { ? ? ? ? ? ? this.flag = true ? ? ? ? ? ? this.$http.get('http://localhost:8088/monitor/query/lidata-DL/cpu.0.percent.active/1600672572/1600672629',{ ? ? ? ? ? ? ? _timeout:5000, ? ? ? ? ? ? ? onTimeout :(request) => { ? ? ? ? ? ? ? ? this.$message.error('請求超時'); ? ? ? ? ? ? ? ? this.loading = false ? ? ? ? ? ? ? } ? ? ? ? ? ? }).then((response) => { ? ? ? ? ? ? ? var res = JSON.parse(response.bodyText); ? ? ? ? ? ? ? this.loading = false; ? ? ? ? ? ? ? this.records = res.records; ? ? ? ? ? ? ? var arr = res.records; ? ? ? ? ? ? ? for(var i = 0;i < arr.length;i++){ ? ? ? ? ? ? ? ? ?this.chartData.push(arr[i]); ? ? ? ? ? ? ? } ? ? ? ? ? ? ? var oSeries = { ? ? ? ? ? ? ? ? ? type: 'area', ? ? ? ? ? ? ? ? ? name: '功率', ? ? ? ? ? ? ? ? ? data: this.chartData ? ? ? ? ? ? ? }; ? ? ? ? ? ? ? HighCharts.chart(this.id,this.option).addSeries(oSeries); ? ? ? ? ? ? }) ? ? ? ? ? }, ? ? ? ? ? toVmDetail(url){ ? ? ? ? ? ? window.open(url) ? ? ? ? ? }, ? ? ? ? ? handleSelect(key, keyPath) { ? ? ? ? ? ? console.log(key, keyPath); ? ? ? ? ? }, ? ? ? ? ? handleOpen(key, keyPath) { ? ? ? ? ? ? console.log(key, keyPath); ? ? ? ? ? }, ? ? ? ? ? handleClose(key, keyPath) { ? ? ? ? ? ? console.log(key, keyPath); ? ? ? ? ? }, ? ? ? ? } ? ? } </script>
原本要求的數(shù)據(jù)格式是二維數(shù)組
series: [{ ? ? type: 'area', ? ? name: 'area', ? ? data: [ ? ? ? ? [1370131200000, 0.7695], ? ? ? ? [1370217600000, 0.7648] ? ? ] }]
然后get請求的數(shù)據(jù)返回的時候直接返回二維數(shù)組就行了
需要注意的就是二維數(shù)組的更新方式
有的時候,當我們手動對data中的數(shù)據(jù)修改時,vue卻監(jiān)聽不到這些數(shù)據(jù)的變化,導致頁面沒有觸發(fā)新一輪的更新。
注意:出現(xiàn)以上問題的原因在于,沒有通過vue提供的方法對保存在data中的數(shù)據(jù)進行修改。強制性通過js對數(shù)據(jù)修改的那些方法,有一部分在vue中是不被認可的。
對于數(shù)組的更新,一種可以使用
- pop 刪除末項
- push 添加一項
- shift 刪除第一項
- unshift 添加第一項
- splice 截取/修改/刪除數(shù)組元素
- sort 對數(shù)組排序
- reverse 取反
另一種則可以通過set方法()
this.set 這是vue實例調用 set 這是vue實例調用set這是vue實例調用set()方法,專門用來修改數(shù)組的
第一個參數(shù),已經(jīng)存在data中的數(shù)據(jù),要被修改的數(shù)組
第二個參數(shù),要修改的數(shù)組下標
第三個參數(shù),要修改的數(shù)組對應下標的值
this.$set (this.selectedarr, index, option)
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
解決Vue中引入swiper,在數(shù)據(jù)渲染的時候,發(fā)生不滑動的問題
今天小編就為大家分享一篇解決Vue中引入swiper,在數(shù)據(jù)渲染的時候,發(fā)生不滑動的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09Vue動態(tài)加載圖片在跨域時無法顯示的問題及解決方法
這篇文章主要介紹了解決VUE動態(tài)加載圖片在跨域時無法顯示的問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03Vue3+NodeJS+Soket.io實現(xiàn)實時聊天的示例代碼
本文主要介紹了Vue3+NodeJS+Soket.io實現(xiàn)實時聊天的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01antd Form組件方法getFieldsValue獲取自定義組件的值操作
這篇文章主要介紹了antd Form組件方法getFieldsValue獲取自定義組件的值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10