vue柱状图排序功能

表格数据排序与更新机制
本文探讨了在前端开发中,如何实现表格数据的升序、降序及默认排序,并详细解析了通过Vue.js框架进行数据排序的方法。文章介绍了如何使用自定义函数sortAscMethod和sortDescMethod来对表格数据进行有效排序,以及如何通过$forceUpdate()方法强制更新视图。
<el-button type="primary" size="mini" @click="editSort(item,'row')">
    <span v-if="item.sort==='asc'"><i class="el-icon-caret-top"></i></span>
    <span v-else-if="item.sort==='desc'"><i class="el-icon-caret-bottom"></i></span>
    <span v-else><i class="el-icon-d-caret"></i></span>
</el-button>

for (let item1 of this.dragTo.rows) {
   item1.sort = 'dcaret'
}
editSort(o,type) {
      this.sortItem = o
      this.sortType = type
      switch (o.sort) {
        case 'asc':
            o.sort = 'desc';
            break;
        case 'desc':
            o.sort = 'dcaret';
            break;
        default:
            o.sort = 'asc';
            break;
        }
        if (this.sortType === 'row') {
          this.dragTo.columns.forEach(item => {
            item.sort = 'dcaret'
          })
          this.dragTo.values.forEach(item => {
            item.sort = 'dcaret'
          })
          this.dragTo.rows.forEach(item => {
            if (item.column === this.sortItem.column) {
              item.sort = this.sortItem.sort
            }
          })
        }
        this.$forceUpdate()
},
this.tableData.forEach((val, i) => {
                  Object.keys(val).forEach(key => {
                    this.dragTo.rows.forEach(item => {
                      if (key === item.alias) {
                        if (item.sort === 'asc') {
                          this.tableData.sort(sortAscMethod(key))
                        } else if (item.sort === 'desc') {
                          this.tableData.sort(sortDescMethod(key))
                        }
                      }
                    })
                  })
})
export function sortAscMethod(prop) {
  return function (obj1, obj2) {
    var val1 = obj1[prop]
    var val2 = obj2[prop]
    if (!isNaN(Number(val1)) && !isNaN(Number(val2))) {
      val1 = Number(val1);
      val2 = Number(val2);
    }
    if (val1 < val2) {
      return -1;
    } else if (val1 > val2) {
      return 1;
    } else {
      return 0;
    }
  }
}
export function sortDescMethod(prop) {
  return function (obj1, obj2) {
    var val1 = obj1[prop]
    var val2 = obj2[prop]
    if (!isNaN(Number(val1)) && !isNaN(Number(val2))) {
      val1 = Number(val1);
      val2 = Number(val2);
    }
    if (val1 < val2) {
      return 1;
    } else if (val1 > val2) {
      return -1;
    } else {
      return 0;
    }
  }
}

 

### 实现 Vue 中 ECharts 动态排序柱状图 为了实现在 Vue 项目中使用 ECharts 创建动态排序的柱状图,需遵循特定步骤并编写相应代码。这不仅涉及到了 ECharts 的基本配置,还涉及到如何响应数据变化而更新图表。 在 Vue 组件内初始化 ECharts 并设置选项时,可以通过监听数据的变化,在每次数据改变后重新渲染图表以达到动态效果[^1]。下面是一个简单的例子: #### 安装依赖 确保已经按照指导安装了 `echarts` 包,并将其正确引入到项目中[^2][^3]。 ```bash npm install echarts --save ``` #### 初始化 ECharts 和 数据绑定 创建一个方法用于初始化 ECharts 实例以及设定初始的数据源和配置项。当组件挂载完成后立即执行此方法来显示初次加载后的图表。 ```javascript // main.js 或者单独文件中全局注册 import * as echarts from 'echarts'; Vue.prototype.$echarts = echarts; ``` ```html <template> <div ref="chartContainer" style="width: 600px;height:400px;"></div> </template> <script> export default { data() { return { chartData: [ { value: 5, name: 'A' }, { value: 8, name: 'B' }, { value: 7, name: 'C' } ], option: {} }; }, watch: { chartData(newValue) { this.updateChart(); } }, methods: { initChart() { let myChart = this.$echarts.init(this.$refs.chartContainer); // 配置项 this.option = { tooltip: {}, xAxis: { type: 'category', axisLabel: { rotate: 45, interval: 0 } }, yAxis: {}, series: [{ type: 'bar', data: newValue.map(item => item.value), name: '数值' }], legend: { data: ['数值'], top: "0%" } }; myChart.setOption(this.option); window.addEventListener('resize', () => myChart.resize()); }, updateChart() { const sortedData = [...this.chartData].sort((a, b) => a.value - b.value); this.option.series[0].data = sortedData.map(item => item.value); this.option.xAxis.data = sortedData.map(item => item.name); this.myChart.setOption(this.option); } }, mounted() { this.initChart(); } }; </script> ``` 上述代码展示了如何利用 Vue 的生命周期钩子函数 `mounted()` 来启动 ECharts 图表,并通过观察器 (`watch`) 对象监控 `chartData` 属性的变化以便及时刷新图表内容。每当 `chartData` 发生变动时都会触发 `updateChart` 方法,从而实现动态排序的效果[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值