当前位置:   article > 正文

vue+elementui 实现表格上移、下移和移除功能_element ui 上下移动 移动到最上面的图标display:none

element ui 上下移动 移动到最上面的图标display:none

需求:有时我们会面对类似这样的表格

 图中的上移,下移功能需求明显要求我们改变两行数据的顺序。在实际开发中这种功能一般由后台来做,因为列表数据一般从后台获取刷新。即是我们点击”上移“,向后台请求接口,后台将数据库表格中的项交换位置,再把新的数据返回,前端拿到数据,重新刷新表格数据。

在此这篇博文仅设计到前端的数据处理及展示效果。因为我在开发过程中遇到了类似的需求,上移、下移功能不局限于表格,它也能是一个循环展示模块中的内容。

核心的JavaScript方法是:splice 对数组处理方法,删除或插入内容

  • 第一个参数是目标位置
  • 第二个参数是从目标位置开始删除的元素个数,0代表不删除元素
  • 第三个参数是选择插入的内容,插入位置自然是第一个参数
  • 前两个参数必选,第三个参数可选

代码例子

  1. <template>
  2. <el-table :data="tableData" border style="width: 58%">
  3. <el-table-column fixed prop="date" label="日期" width="150"></el-table-column>
  4. <el-table-column prop="name" label="姓名" width="120"></el-table-column>
  5. <el-table-column prop="province" label="省份" width="120"></el-table-column>
  6. <el-table-column prop="city" label="市区" width="120"></el-table-column>
  7. <el-table-column prop="address" label="地址" width="300"></el-table-column>
  8. <el-table-column prop="zip" label="邮编" width="120"></el-table-column>
  9. <el-table-column fixed="right" label="操作" width="150">
  10. <template slot-scope="scope">
  11. <el-button
  12. type="text"
  13. size="small"
  14. @click="moveUp(scope.row, scope.$index)"
  15. :disabled="scope.$index === 0"
  16. >上移</el-button>
  17. <!-- 这里分别展示了判断是否上移下移的两种方案 -->
  18. <el-button
  19. type="text"
  20. size="small"
  21. @click="moveDown(scope.row, scope.$index)"
  22. :disabled="getFormLength(scope.$index)"
  23. >下移</el-button>
  24. <el-button type="text" size="small" @click="deleteItem(scope.$index)">移除</el-button>
  25. </template>
  26. </el-table-column>
  27. </el-table>
  28. </template>
  29. <script>
  30. export default {
  31. name: "splice",
  32. data() {
  33. return {
  34. disabled: true,
  35. tableData: [
  36. {
  37. date: "2016-05-02",
  38. name: "王小虎",
  39. province: "上海",
  40. city: "普陀区",
  41. address: "上海市普陀区金沙江路 1518 弄",
  42. zip: 200333,
  43. },
  44. {
  45. date: "2016-05-04",
  46. name: "张小龙",
  47. province: "深圳",
  48. city: "福田区",
  49. address: "车公庙",
  50. zip: 200333,
  51. },
  52. {
  53. date: "2016-05-01",
  54. name: "李牧",
  55. province: "江南",
  56. city: "鑫林",
  57. address: "南山区",
  58. zip: 200333,
  59. },
  60. {
  61. date: "2016-05-03",
  62. name: "哪吒",
  63. province: "普拉达",
  64. city: "纽约",
  65. address: "国家公园",
  66. zip: 200333,
  67. },
  68. ],
  69. };
  70. },
  71. methods: {
  72. // 上移
  73. moveUp(item, index) {
  74. this.tableData.splice(index - 1, 0, item); // 定位到点击位置的上一行,0即不删除如何元素,在此位置插入item
  75. this.tableData.splice(index + 1, 1); // 此时数组中有重复元素,把原来被挤下去的元素删除
  76. },
  77. // 下移
  78. moveDown(item, index) {
  79. this.tableData.splice(index + 2, 0, item);
  80. this.tableData.splice(index, 1);
  81. },
  82. // 添加
  83. // addItem() {
  84. // let item = {
  85. // date: "",
  86. // name: "",
  87. // province: "",
  88. // city: "",
  89. // address: "",
  90. // zip: "",
  91. // };
  92. // this.tableData.push(item);
  93. // },
  94. // 删除
  95. deleteItem(index) {
  96. console.log("delete");
  97. this.tableData.splice(index, 1);
  98. },
  99. // 控制下移按钮的显示于隐藏
  100. getFormLength(index) {
  101. if (index === this.tableData.length - 1) return true;
  102. else return false;
  103. },
  104. },
  105. };
  106. </script>
  107. <style lang="scss" scoped>
  108. </style>

例子的基础是elementui中表格的例子,添加了自定义的上移、下移和移除方法,做得完善一些,自然要处理隐藏掉第一行的上移按钮和最后一行的下移按钮,并提供相关的判别方法

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号