经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JSJS库框架 » JavaScript » 查看文章
VUE +element el-table运用sortable 拖拽table排序,实现行排序,列排序
来源:cnblogs  作者:阿甘前端  时间:2018/9/28 16:51:40  对本文有异议

Sortable.js是一款轻量级的拖放排序列表的js插件(虽然体积小,但是功能很强大)

 

项目需求是要求能对element中 的table进行拖拽行排序

这里用到了sorttable 

Sortable.js是一款轻量级的拖放排序列表的js插件(虽然体积小,但是功能很强大)

官方Demo:http://rubaxa.github.io/Sortable/

 

安装步骤:

  1. npm install sortablejs --save

 

在.vue中的js部分(需要用到sorttable的vue文件中)引入  也可以 在main.js中引入注册到Vue的根实例中

  1. import Sortable from 'sortablejs'

HTML 部分

  1. <el-table :data="tableData"
  2. border
  3. width="100%"
  4. row-key="id"
  5. align="left"
  6. v-show="showDictItem">
  7. <el-table-column width="50px">
  8. <template slot-scope="scope">
  9. <el-button type='text' v-show="scope.row.defaultValue === 1">默认</el-button>
  10. </template>
  11. </el-table-column>
  12. <el-table-column
  13. width="60px"
  14. label="序号"
  15. type="index">
  16. </el-table-column>
  17. <el-table-column v-for="(item, index) in col"
  18. :key="`col_${index}`"
  19. :prop="dropCol[index].prop"
  20. :label="item.label">
  21. </el-table-column>
  22. <el-table-column label="操作" min-width="100">
  23. <template slot-scope="scope">
  24. <el-button
  25. size="mini"
  26. @click="handleEdit(scope.$index, scope.row)">修改</el-button>
  27. <el-popover placement="top" v-model="scope.row.visible">
  28. <p>确定要删除当前内容?</p>
  29. <div style="text-align: right; margin: 0">
  30. <el-button size="mini" plain @click="scope.row.visible = false">取消</el-button>
  31. <el-button type="primary" size="mini" @click="handleDelete(scope.$index, scope.row), scope.row.visible = false">确定</el-button>
  32. </div>
  33. <el-button
  34. size="mini"
  35. type="danger"
  36. slot="reference">删除</el-button>
  37. </el-popover>
  38. <el-button
  39. size="mini"
  40. type="primary"
  41. @click="handleDefault(scope.$index, scope.row)" v-show="scope.row.defaultValue === 0">默认</el-button>
  42. <el-button
  43. size="mini"
  44. type="primary"
  45. @click="handleDefault(scope.$index, scope.row)" v-show="scope.row.defaultValue === 1">取消</el-button>
  46. </template>
  47. </el-table-column>
  48. </el-table>

data 部分

  1. col: [
  2. {
  3. label: '值',
  4. prop: 'dataKey'
  5. },
  6. {
  7. label: '显示名',
  8. prop: 'dataValue'
  9. }
  10. ],
  11. dropCol: [
  12. {
  13. label: '值',
  14. prop: 'dataKey'
  15. },
  16. {
  17. label: '显示名',
  18. prop: 'dataValue'
  19. }
  20. ],
  21. tableData: [],

methos

  1. //行拖拽
  2. rowDrop() {
  3. const tbody = document.querySelector('.el-table__body-wrapper tbody')
  4. const _this = this
  5. Sortable.create(tbody, {
  6. onEnd({ newIndex, oldIndex }) {
  7. const currRow = _this.tableData.splice(oldIndex, 1)[0]
  8. _this.tableData.splice(newIndex, 0, currRow)
  9. }
  10. })
  11. },
  12. //列拖拽
  13. columnDrop() {
  14. const wrapperTr = document.querySelector('.el-table__header-wrapper tr')
  15. this.sortable = Sortable.create(wrapperTr, {
  16. animation: 180,
  17. delay: 0,
  18. onEnd: evt => {
  19. const oldItem = this.dropCol[evt.oldIndex]
  20. this.dropCol.splice(evt.oldIndex, 1)
  21. this.dropCol.splice(evt.newIndex, 0, oldItem)
  22. }
  23. })
  24. },

这样就可以实现基本的行拖拽和列拖拽了

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号