vue中使用echarts来绘制中国地图,NuxtJS制作疫情地图,内有详细注释,我就懒得解释了,vue cli制作疫情地图 代码略有不同哦~~~

我的代码自我感觉----注释一向十分详细,就不用过多解释都是什么了~~

因为最近疫情期间在家实在是没事干,想找点事,就练手了个小demo

首先上 NuxtJs版本代码,这里面

export default {
  mode: ‘universal‘,
  /*
  ** Headers of the page
  */
  head: {
    title: process.env.npm_package_name || ‘‘,
    meta: [
      { charset: ‘utf-8‘ },
      { name: ‘viewport‘, content: ‘width=device-width, initial-scale=1‘ },
      { hid: ‘description‘, name: ‘description‘, content: process.env.npm_package_description || ‘‘ }
    ],
    link: [
      { rel: ‘icon‘, type: ‘image/x-icon‘, href: ‘/favicon.ico‘ }
    ]
  },
  /*
  ** Customize the progress-bar color
  */
  loading: { color: ‘#fff‘ },
  /*
  ** Global CSS
  */
  css: [
  ],
  /*
  ** Plugins to load before mounting the App
  */
  plugins: [
  ],
  /*
  ** Nuxt.js dev-modules
  */
  buildModules: [
    // Doc: https://github.com/nuxt-community/eslint-module
    ‘@nuxtjs/eslint-module‘
  ],
  /*
  ** Nuxt.js modules
  */
  modules: [
    // Doc: https://axios.nuxtjs.org/usage
    ‘@nuxtjs/axios‘,
    ‘@nuxtjs/pwa‘,
    // Doc: https://github.com/nuxt-community/dotenv-module
    ‘@nuxtjs/dotenv‘
  ],
  /*
  ** Axios module configuration
  ** See https://axios.nuxtjs.org/options
  */
  axios: {
  },
  /*
  ** Build configuration
  */
  build: {
    /*
    ** You can extend webpack config here
    */
    extend (config, ctx) {
      config.module.rules.push({
        enforce: ‘pre‘,
        test: /\.(js|vue)$/,
        loader: ‘eslint-loader‘,
        exclude: /(node_modules)/,
        options: {
          fix: true
        }
      })
    }
  }
}
helloword.vue<template>
  <div class="hello">
    <!-- 初始化echarts需要一个有宽高的盒子 -->
    <div id="mychart" ref="mapbox" style="width:100%;min-width:300px;height:100%;min-height:400px" />
  </div>
</template>

<script>
import echarts from ‘echarts‘
import ‘echarts/map/js/china‘
import jsonp from ‘jsonp‘
// const option1 = {
//   xAxis: {
//     type: ‘category‘,
//     data: [‘Mon‘, ‘Tue‘, ‘Wed‘, ‘Thu‘, ‘Fri‘, ‘Sat‘, ‘Sun‘]
//   },
//   yAxis: {
//     type: ‘value‘
//   },
//   series: [{
//     data: [820, 932, 901, 934, 1290, 1330, 1320],
//     type: ‘line‘
//   }]
// }
// 使用地图先注册地图
const option2 = {
  title: { text: ‘疫情地图‘, link: ‘http://tangdd.cn‘, subtext: ‘全国疫情地图一览表‘ },
  series: [{
    data: [], // 用来展示后台给的数据
    type: ‘map‘, // 控制是折线图还是地图
    map: ‘china‘, // 控制是那个地区地图
    label: { show: true, color: ‘black‘, fontSize: 10 }, // 控制对应地区的汉字
    itemStyle: {
      areaColor: ‘pink‘,
      borderColor: ‘#776a6a‘
    }, // 控制地图的颜色还有边框
    emphasis: {
      label: {
        color: ‘black‘,
        fontSize: 12
      },
      itemStyle: {
        areaColor: ‘#ccc‘
      }
    }, // 控制鼠标滑过之后背景色和字体颜色
    zoom: 1// 控制地图的放大缩小
  }],
  // 分层次显示地图颜色用下面这个东西,就是地图左下角那个东西
  visualMap: [{
    zoom: 1,
    type: ‘piecewise‘, // 条状
    show: true,
    splitNumber: 5, // 默认分为几条,就是看你要搞几个间断
    pieces: [
      { min: 10000 },
      { min: 1000, max: 9999 },
      { min: 100, max: 999 },
      { min: 10, max: 99 },
      { min: 1, max: 9 }
    ],
    align: ‘right‘, // 控制字和条的位置,默认放到左边
    // orient:‘horizontal‘,//控制整块的位置是平铺一大长条还是垂直啥的,默认垂直
    // left:40 ,//控制分段位置控制整块的位置
    // right:100 //控制分段位置控制整块的位置
    // showLabel:false,//这个没什么用处,会隐藏字
    // textStyle:{},//这个很明显是搞字体的
    inRange: {
      symbol: ‘rect‘,
      color: [‘#ffc9c9‘, ‘#9c0505‘]
    }, // 这个控制小图是圆的还是方的啥的还有渐变色
    itemWidth: 8,
    itemHeight: 4
  }]
}
export default {
  name: ‘HelloWorld‘,
  mounted () {
    this.getData()
    this.mychart = echarts.init(this.$refs.mapbox)
    // mychart.setOption(option1)
    this.mychart.setOption(option2)
    this.resizeTheChart()
    window.addEventListener(‘resize‘, this.resizeTheChart)
  },
  methods: {
    resizeTheChart () {
      if (this.$refs && this.$refs.mapbox) {
        const mychartNode = document.getElementById(‘mychart‘)
        mychartNode.style.height = mychartNode.offsetWidth * 0.8 + ‘px‘
        this.mychart.resize()
      }
    },
    // 接口采用自‘https://renjinhui.github.io/review_vue/dist/index.html#/yqdt‘
    getData () {
      jsonp(‘https://interface.sina.cn/news/wap/fymap2020_data.d.json?_=1580892522427&callback=__jp0‘, {}, (err, data) => {
        if (!err) {
          // eslint-disable-next-line no-console
          console.log(data)
          const list = data.data.list.map(item => ({ name: item.name, value: item.value }))
          option2.series[0].data = list
          // eslint-disable-next-line no-console
          console.log(list)
          this.mychart.setOption(option2)// 这行代码必须是DOM渲染完成才可以执行哦
        }
      })
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="less">
h3 {
  margin: 40px 0 0;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>
index.vue
<template>
  <div class="container">
    <!-- 头部1 -->
    <div class="item item_top">
      <img src="../static/img/top.jpg" alt class="w_100">
      <div class="index_item_topfont">
        <h4>新型冠状病毒</h4>
        <h4>疫情实时动态 · 省市地图</h4>
      </div>
    </div>
    <!-- 头部2 -->
    <!-- 中间 -->
    <div class="font_statement">
      <div class="statement_title">
        全国疫情状况
      </div>
      <div class="update_time">
        截止{{ mydata1 }}
      </div>
    </div>
    <!-- 中间 -->
    <!-- 卡片 -->
    <div class="myrow">
      <div class="tag">
        <p>{{ confirmedCount }}</p>
        确诊
      </div>
      <div class="tag">
        <p>{{ suspectedCount }}</p>
        疑似
      </div>
      <div class="tag">
        <p>{{ deadCount }}</p>
        死亡
      </div>
      <div class="tag">
        <p>{{ curedCount }}</p>
        治愈
      </div>
    </div>
    <!-- 卡片 -->
  </div>
</template>

<script>
// import Logo from ‘~/components/Logo.vue‘

export default {
  components: {
    // Logo
  },
  data () {
    return {
      mydata1: ‘111‘,
      confirmedCount: ‘‘,
      suspectedCount: ‘‘,
      curedCount: ‘‘,
      deadCount: ‘‘
    }
  },
  created () {
    this.setDate()
    this.getData()
  },
  methods: {
    getData () {
      this.$axios.get(‘https://lab.ahusmart.com/nCoV/api/overall‘).then((res) => {
        if (res.status === 200) {
          const _ = res.data.results[0]
          this.confirmedCount = _.confirmedCount
          this.suspectedCount = _.suspectedCount
          this.curedCount = _.curedCount
          this.deadCount = _.deadCount
        }
        // eslint-disable-next-line no-console
        console.log(res)
      })
    },
    setDate () {
      this.mydata1 = this.getweek()
      // eslint-disable-next-line
      console.log(this.mydata1)
    },
    getweek (dateString) {
      let da = ‘‘
      if (dateString === undefined) {
        // 需要修改时间,改为昨天
        const aaa = new Date() - 86400000
        const now = new Date(aaa)
        let nowM = now.getMonth() + 1
        // eslint-disable-next-line camelcase
        nowM = nowM < 10 ? ‘0‘ + nowM : nowM
        let nowD = now.getDate()
        nowD = nowD < 10 ? ‘0‘ + nowD : nowD
        da = now.getFullYear() + ‘-‘ + nowM + ‘-‘ + nowD
        // eslint-disable-next-line no-console
        console.log(‘今天系统时间是:‘ + da)
      } else {
        da = dateString.toString()
        // 日期格式2015-12-30
      }
      // 下面备用
      const date1 = new Date(
        da.substring(0, 4),
        parseInt(da.substring(5, 7)) - 1,
        da.substring(8, 10)
      )
      // 当前日期
      const date2 = new Date(da.substring(0, 4), 0, 1)
      // 1月1号
      // 获取1月1号星期(以周一为第一天,0周一~6周日)
      let dateWeekNum = date2.getDay() - 1
      if (dateWeekNum < 0) {
        dateWeekNum = 6
      }
      if (dateWeekNum < 4) {
        // 前移日期
        date2.setDate(date2.getDate() - dateWeekNum)
      } else {
        // 后移日期
        date2.setDate(date2.getDate() + 7 - dateWeekNum)
      }
      const d = Math.round((date1.valueOf() - date2.valueOf()) / 86400000)
      if (d < 0) {
        const date3 = date1.getFullYear() - 1 + ‘-12-31‘
        return this.getweek(date3)
      } else {
        // 得到年数周数
        const year = date1.getFullYear()
        const week = Math.ceil((d + 1) / 7)
        // eslint-disable-next-line no-console
        console.log(year + ‘年第‘ + week + ‘周‘)
        return da
      }
    }
  }
}
</script>

<style lang=‘less‘ scoped>
.container {
  width: 100%;
  min-width: 12rem;
  // max-width: 50rem;
  margin: 0 auto;
  .item_top {
    position: relative;
    color: white;
    .index_item_topfont {
      position: absolute;
      color: white;
      bottom: 10%;
      font-size: 2rem;
      left: 1rem;
    }
    @media screen and (max-width: 550px) {
      .index_item_topfont {
        left: 0.8rem;
        h4 {
          font-size: 1rem;
        }
      }
    }
    @media screen and (max-width: 280px) {
      .index_item_topfont {
        left: 0.5rem;
        h4 {
          font-size: 0.5rem;
        }
      }
    }
  }
  .font_statement{
    position: relative;
    text-align: left;
    margin: 15px 15px;
    padding: 0px 0px 5px 10px;
    border-left: .2rem solid #f60;
    border-bottom: 1px solid #efefef;
    .statement_title{
      font-size: 20px;
      font-weight: bold;
    }
    .update_time{
      font-size: 12px;
      color: #b6b6b6;
      font-weight: normal;
      vertical-align: middle;
    }
  }
  .myrow{
    display: flex;
    align-items: center;
    justify-content: center;
    .tag{
      width: 20%;
      text-align: center;
      border-radius: 4px;
      padding: 10px 10px;
      background-color: #f3f3f3;
      font-size: 15px;
      // margin-right: 5px;
      p{
      color: red;
      font-size: 20px;
      }
    }
  }
  .myrow .tag:not(:nth-child(4n)) {
 margin-right: 5px;
}
}
/* 公共样式1 */
.w_100 {
  width: 100%;
}
.font_h1 {
  font-size: 2rem;
}
.font_h2 {
  font-size: 1.5rem;
}
@media screen and (max-width: 550px) {
  .font_h1 {
    font-size: 1rem;
  }
  .font_h2 {
    font-size: 0.8rem;
  }
}
@media screen and (max-width: 280px) {
  .font_h1 {
    font-size: 0.5rem;
  }
  .font_h2 {
    font-size: 0.2rem;
  }
}
/* 公共样式2*/
</style>

接下来是  vuecli  前端渲染版本

不同之处很细微

top.vue
/* eslint-disable camelcase */
<template>
  <div class="container">
    <!-- 头部1 -->
    <div class="item item_top">
      <img src="../assets/img/top.jpg" alt class="w_100">
      <div class="index_item_topfont">
        <h4>新型冠状病毒</h4>
        <h4>疫情实时动态 · 省市地图</h4>
      </div>
    </div>
    <!-- 头部2 -->
    <!-- 中间 -->
    <div class="font_statement">
      <div class="statement_title">
        全国疫情状况
      </div>
      <div class="update_time">
        截止{{ mydata1 }}
      </div>
    </div>
    <!-- 中间 -->
    <!-- 卡片 -->
    <div class="myrow">
      <div class="tag">
        <p>{{ confirmedCount }}</p>
        确诊
      </div>
      <div class="tag">
        <p>{{ suspectedCount }}</p>
        疑似
      </div>
      <div class="tag">
        <p>{{ deadCount }}</p>
        死亡
      </div>
      <div class="tag">
        <p>{{ curedCount }}</p>
        治愈
      </div>
    </div>
    <!-- 卡片 -->
  </div>
</template>

<script>
// import Logo from ‘~/components/Logo.vue‘
import axios from ‘axios‘

export default {
  components: {
    // Logo
  },
  data () {
    return {
      mydata1: ‘111‘,
      confirmedCount: ‘‘,
      suspectedCount: ‘‘,
      curedCount: ‘‘,
      deadCount: ‘‘
    }
  },
  created () {
    this.setDate()
    this.getData()
  },
  methods: {
    getData () {
      axios.get(‘https://lab.ahusmart.com/nCoV/api/overall‘).then((res) => {
        if (res.status === 200) {
          const _ = res.data.results[0]
          this.confirmedCount = _.confirmedCount
          this.suspectedCount = _.suspectedCount
          this.curedCount = _.curedCount
          this.deadCount = _.deadCount
        }
        // eslint-disable-next-line no-console
        console.log(res)
      })
    },
    setDate () {
      this.mydata1 = this.getweek()
      // eslint-disable-next-line
      console.log(this.mydata1)
    },
    getweek (dateString) {
      let da = ‘‘
      if (dateString === undefined) {
        // 需要修改时间,改为昨天
        const aaa = new Date() - 86400000
        const now = new Date(aaa)
        let nowM = now.getMonth() + 1
        // eslint-disable-next-line camelcase
        nowM = nowM < 10 ? ‘0‘ + nowM : nowM
        let nowD = now.getDate()
        nowD = nowD < 10 ? ‘0‘ + nowD : nowD
        da = now.getFullYear() + ‘-‘ + nowM + ‘-‘ + nowD
        // eslint-disable-next-line no-console
        console.log(‘昨天系统时间是(偷偷减掉了一天嘿嘿):‘ + da)
      } else {
        da = dateString.toString()
        // 日期格式2015-12-30
      }
      // 下面备用
      const date1 = new Date(
        da.substring(0, 4),
        parseInt(da.substring(5, 7)) - 1,
        da.substring(8, 10)
      )
      // 当前日期
      const date2 = new Date(da.substring(0, 4), 0, 1)
      // 1月1号
      // 获取1月1号星期(以周一为第一天,0周一~6周日)
      let dateWeekNum = date2.getDay() - 1
      if (dateWeekNum < 0) {
        dateWeekNum = 6
      }
      if (dateWeekNum < 4) {
        // 前移日期
        date2.setDate(date2.getDate() - dateWeekNum)
      } else {
        // 后移日期
        date2.setDate(date2.getDate() + 7 - dateWeekNum)
      }
      const d = Math.round((date1.valueOf() - date2.valueOf()) / 86400000)
      if (d < 0) {
        const date3 = date1.getFullYear() - 1 + ‘-12-31‘
        return this.getweek(date3)
      } else {
        // 得到年数周数
        const year = date1.getFullYear()
        const week = Math.ceil((d + 1) / 7)
        // eslint-disable-next-line no-console
        console.log(year + ‘年第‘ + week + ‘周‘)
        return da
      }
    }
  }
}
</script>

<style lang=‘less‘ scoped>
*{
 padding:0;
  margin: 0;
}
h4{

  text-align: left;
}
.container {
  width: 100%;
  min-width: 300px;
  // max-width: 50rem;
  margin: 0 auto;
  .item_top {
    position: relative;
    color: white;
    .index_item_topfont {
      position: absolute;
      color: white;
      bottom: 10%;
      font-size: 2rem;
      left: 1rem;
    }
    @media screen and (max-width: 550px) {
      .index_item_topfont {
        left: 0.8rem;
        h4 {
          font-size: 1rem;
        }
      }
    }
    @media screen and (max-width: 300px) {
      .index_item_topfont {
        left: 0.5rem;
        h4 {
          font-size: 0.5rem;
        }
      }
    }
  }
  .font_statement{
    position: relative;
    text-align: left;
    margin: 15px 15px;
    padding: 0px 0px 5px 10px;
    border-left: .2rem solid #f60;
    border-bottom: 1px solid #efefef;
    .statement_title{
      font-size: 20px;
      font-weight: bold;
    }
    .update_time{
      font-size: 12px;
      color: #b6b6b6;
      font-weight: normal;
      vertical-align: middle;
    }
  }
  .myrow{
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    justify-content: center;
    .tag{
      width: 17%;
      margin:0.2rem 0;
      text-align: center;
      border-radius: 4px;
      padding: 10px 10px;
      background-color: #f3f3f3;
      font-size: 15px;
      // margin-right: 5px;
      p{
      color: red;
      font-size: 20px;
      }
    }
  }
  .myrow .tag:not(:nth-child(4n)) {
 margin-right: 5px;
}
}
/* 公共样式1 */
.w_100 {
  width: 100%;
}
.font_h1 {
  font-size: 2rem;
}
.font_h2 {
  font-size: 1.5rem;
}
@media screen and (max-width: 550px) {
  .font_h1 {
    font-size: 1rem;
  }
  .font_h2 {
    font-size: 0.8rem;
  }
}
@media screen and (max-width: 300px) {
  .font_h1 {
    font-size: 0.5rem;
  }

    .container .myrow .tag{
      width: 30%;}
     .container   .myrow .tag:not(:nth-child(4n)) {
 margin-right: 0px;
}
  .container .myrow .tag:not(:nth-child(2n)) {
 margin-right: 0.4rem;}
  .font_h2 {
    font-size: 0.2rem;
  }
}
/* 公共样式2*/
</style>
helloword.vue
<template>
  <div class="hello">
    <mytop/>
  <!-- 初始化echarts需要一个有宽高的盒子 -->
  <div id="mychart" ref=‘mapbox‘ style=‘margin-top:10px;width:100%;min-width:300px;height:100%;min-height:400px‘>

  </div>
  </div>
</template>

<script>
import mytop from ‘./top.vue‘
import echarts from ‘echarts‘
import ‘echarts/map/js/china‘
import jsonp from ‘jsonp‘
const option1 = {
    xAxis: {
        type: ‘category‘,
        data: [‘Mon‘, ‘Tue‘, ‘Wed‘, ‘Thu‘, ‘Fri‘, ‘Sat‘, ‘Sun‘]
    },
    yAxis: {
        type: ‘value‘
    },
    series: [{
        data: [820, 932, 901, 934, 1290, 1330, 1320],
        type: ‘line‘
    }]
}
// 使用地图先注册地图
const option2 = {
  title:{text:‘疫情地图‘,link:‘http://tangdd.cn‘,subtext:‘全国疫情地图一览表‘},
  series:[{
    data:[],//用来展示后台给的数据
    type:‘map‘,//控制是折线图还是地图
    map:‘china‘,//控制是那个地区地图
    label:{ show:true ,color: ‘black‘,fontSize:10},//控制对应地区的汉字
    itemStyle:{
      areaColor:‘pink‘,
      borderColor:‘#776a6a‘
    },//控制地图的颜色还有边框
    emphasis:{
      label:{
        color:‘black‘,
        fontSize:12
      },
      itemStyle:{
        areaColor:‘#ccc‘
      }
    },//控制鼠标滑过之后背景色和字体颜色
    zoom:1,//控制地图的放大缩小
  }],
  //分层次显示地图颜色用下面这个东西,就是地图左下角那个东西
  visualMap:[{
    zoom:1,
    type:‘piecewise‘,//条状
    show:true,
    splitNumber:5,//默认分为几条,就是看你要搞几个间断
    pieces:[
      {min:10000},
      {min:1000,max:9999},
      {min:100,max:999},
      {min:10,max:99},
      {min:1,max:9}
      ],
      align:‘right‘,//控制字和条的位置,默认放到左边
      // orient:‘horizontal‘,//控制整块的位置是平铺一大长条还是垂直啥的,默认垂直
      // left:40 ,//控制分段位置控制整块的位置
      // right:100 //控制分段位置控制整块的位置
      // showLabel:false,//这个没什么用处,会隐藏字
      // textStyle:{},//这个很明显是搞字体的
      inRange:{
        symbol:‘rect‘,
        color:[‘#ffc9c9‘,‘#9c0505‘]
      },//这个控制小图是圆的还是方的啥的还有渐变色
      itemWidth:8,
      itemHeight:4
  }]
}
export default {
  name: ‘HelloWorld‘,
  components: {
    mytop
  },
  mounted(){
    this.getData()
    this.mychart = echarts.init(this.$refs.mapbox)
    // mychart.setOption(option1)
    this.mychart.setOption(option2)
    this.resizeTheChart()
    window.addEventListener("resize", this.resizeTheChart);
  },
  methods:{
     resizeTheChart() {
      if (this.$refs && this.$refs.mapbox) {
        let mychartNode = document.getElementById(‘mychart‘);
        mychartNode.style.height = mychartNode.offsetWidth*0.8+‘px‘
        this.mychart.resize();
      }
    },
    // 接口采用自‘https://renjinhui.github.io/review_vue/dist/index.html#/yqdt‘
    getData(){
      jsonp(‘https://interface.sina.cn/news/wap/fymap2020_data.d.json?_=1580892522427&callback=__jp0‘,{},(err,data)=>{
        if(!err){
          console.log(data)
          let list = data.data.list.map(item=>({name:item.name,value:item.value}))
          option2.series[0].data = list;
          console.log(list)
          this.mychart.setOption(option2)//这行代码必须是DOM渲染完成才可以执行哦
        }
      })
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="less">

*{
 padding:0;
  margin: 0;
}
h3 {
  margin: 40px 0 0;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>

原文地址:https://www.cnblogs.com/sugartang/p/12334152.html

时间: 2024-10-09 18:30:53

vue中使用echarts来绘制中国地图,NuxtJS制作疫情地图,内有详细注释,我就懒得解释了,vue cli制作疫情地图 代码略有不同哦~~~的相关文章

VUE中使用Echarts绘制柱状图

在main.js中引入echarts import echarts from 'echarts' Vue.prototype.$echarts = echarts 在相应的vue中导入echarts import echarts from 'echarts'; 实现柱状图显示 <div style="width: 100%;height: 50%;border:1px solid rgb(180,180,180);top: 0px" id="echartss"

项目vue中使用echarts步骤

1.在组件中创建该模块 <template> <div id = "testChart"></div> </template> 2.导入echarts 前提是:已经在项目中配置过echarts 在<script></script>中导入echarts <script> import {echartInit} from "../../../utils/echartUtils" <

vue 中使用 echarts 自适应问题

echarts 自带的自适应方法  resize() 具体用法: let xxEcharts = this.$echarts.init(document.getElementById('xxx')) xxEcharts.setOption(xxxx)  // 参数是 echarts 的option对象 window.onresize = xxEcharts.resize 但是,问题来了,同一个页面使用多个echarts 的时候,window.onresize = xxEcharts.resize

vue中使用echarts

1.下载依赖 cnpm i echarts -S 2.模块中引入 <template> <div class="analyzeSystem"> <div :class="className" :id="id" :style="{height:height,width:width}" ref="myEchart"></div> </div> <

DirectShow中写push模式的source filter流程 + 源代码(内附详细注释)

虽然网上已有很多关于DirectShow写source filter的资料,不过很多刚开始学的朋友总说讲的不是很清楚(可能其中作者省略了许多他认为简 单的过程),读者总希望看到象第一步怎么做,第二步怎么做....这样的demo.其实写你的第一个filter是有一定难度的,只要过了这关以后 就容易多了.由于最近需要自己写一个push推模式的source filter,加上刚激活了Blog,不好意思Blog上没有一篇文章,所以将写这个filter的过程写下来 ,为了照顾刚开始学的朋友,我采用第一步第

vue+echarts 动态绘制图表以及异步加载数据

前言 背景:vue写的后台管理,需要将表格数据绘制成图表(折线图,柱状图),图表数据都是通过接口请求回来的. 安装 cnpm install echarts --s (我这里用了淘宝镜像,不知道同学自行百度) 实例化   在已有的项目中下载好了echarts 之后,可以打开官方文档,但是我觉得官方文档对于实例化介绍的不够清晰,这也是我为什么在这么多的文章中还要写的原因,前辈写的太模糊了,我决定好好给后来人,需要在项目中引用图表的人,一些实用,快捷的东西. 官方文档:http://echarts.

Vue系列——在vue项目中使用echarts

安装echarts依赖 npm install echarts -S 创建图表 全局引入 main.js // 引入echarts import echarts from 'echarts' Vue.prototype.$echarts = echarts Hello.vue <div id="myChart" :style="{width: '300px', height: '300px'}"></div> export default {

vue中如何使用echarts

在vue中使用echarts主要是注意如何与vue生命周期相结合,从而做到数据驱动视图刷新 主要是以下几步: echarts的option设置在data(){}中 在mounted(){}生命周期去初始化数据,初始化echarts 在updated(){}生命周期中去setOption(option)渲染echarts. 模板vue文件如下: <template> <div id="myChart" ref="myChart"></di

Wabpack系列:在webpack+vue开发环境中使用echarts导致编译文件过大怎么办?

现象,在一个webpack+vue的开发环境中,npm install echarts --save了echarts,然后在vue文件中直接使用 import echarts from 'echarts' 然后编译的时候加上了Uglify选项,发现vendor文件的大小已经达到了800多k,导致首次加载速度比较慢,然后我们这个是webapp,就更慢了. 所以考虑把echarts提取出来,改用cdn版本的echarts,具体操作步骤如下: (0)找到可用的echartscdn资源 在bootcdn