vue+ElementUI中table排序的两种方式点击和拖拽

场景:用户要求做一个列表的排序,支持点击上下排序拖拽排序。在此记录,以备不时之需。

效果展示:

排序前

排序后:

点击排序

 点击排序没什么可说的   这里只提供思路和简略代码。

思路: 点击👆或👇排序  就是 把本层的sort(排序字段)、id(行数据唯一标识)和上一行的sort和id拿到一共四个数据,送到后端交叉储存就好了,这样就实现了点击排序很简单吧!!

代码

   上移排序:

  updateOrderByUp(index, row) {//上移顺序
      console.log("上移排序",index,row)
      if (index == 0) {
        this.$message.error('已经是第一个选项,无法上移!');
      } else {
        let data = {
          id : row.id,
          sort : index,
          otherId : this.uploadArray[index - 1].id,
          otherSort :  index-1,
        };
        updateAttachOrderBy(data).then(res => {//数据库保存排序
          //刷新列表数据
            this.refreshAfterSort()
        });
      }
    },

下移排序:

        其他代码与除以下两行外并无其他差别

          otherId : this.uploadArray[index + 1].id,
          otherSort :  index+1,

至于后端更简单,就是拿到id 然后把sort交换一下存库即可。

拖拽排序

我使用的是 sortable的插件 对表格数据进行拖拽排序

第一步 :导入插件库

npm install sortablejs --save

第一步 :引入插件

import Sortable from 'sortablejs'

第三步 :拖拽的核心代码

rowDrop() {
      const tbody = document.querySelector(".el-table__body-wrapper tbody");
      const _this = this;
      Sortable.create(tbody, {
        onEnd({ newIndex, oldIndex }) {
          if (newIndex!==oldIndex){//有且仅在有效拖拽时执行方法
            const currRow = _this.uploadArray.splice(oldIndex, 1)[0];
            _this.uploadArray.splice(newIndex, 0, currRow);
            _this.$set(value, "sort", index);  
            let  dataList=[]  
            _this.uploadArray.forEach((value,index) => {
              let data = {
                id : value.id,
                sort : index,
              };
              dataList.push(data)
            })
            //执行排序操作
            updateAttachDragSort(dataList).then(res=>{
              //拖拽后刷新列表数据
              _this.refreshAfterSort()
            })
          }
        },
      });
    },

 this.$set用法详解:

this.$set
    是Vue中的一个实例方法,用于在响应式对象上设置新的属性或修改已有的属性,并确保这些属性也是响应式的。它可以解决Vue响应式系统的一个限制,即无法检测到通过索引直接设置数组元素或通过Object.defineProperty添加的属性的变化。通过使用this.$set方法,可以显式地告诉Vue某个属性的值已经发生了变化,从而触发视图的更新

非常重要的一点   row-key="列表数据唯一标识"

此项为非常重要,不加此属性,拖拽排序会出错,拖拽完之后页面数据会非常奇怪!!非常重要。

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue和Element UI都是现代化的前端框架,各自拥有强大的API和功能。在Vue,我们可以简单地使用v-for指令和props从服务器加载表格数据,并在页面上呈现出来。然后,我们可以使用v-on指令(或简化的@符号)来监听单元格的点击事件。当单元格被点击时,我们可以使用Element UI的Dialog组件来呈现一个弹框。 具体实现过程如下: 1. 首先,我们需要安装Vue和Element UI。你可以单独下载这两个框架,然后将它们引入你的项目,或者你可以使用npm来安装它们: npm install vue npm install element-ui 2. 然后,我们需要从服务器加载表格数据。假设数据已经存储在组件的data属性,并且我们使用了一个简单的表格模板: <table> <thead> <tr> <th>名称</th> <th>价格</th> <th>描述</th> </tr> </thead> <tbody> <tr v-for="(item, index) in items" :key="index"> <td>{{ item.name }}</td> <td>{{ item.price }}</td> <td>{{ item.description }}</td> </tr> </tbody> </table> 3. 接下来,我们需要监听单元格的点击事件。我们可以为每个单元格添加一个事件处理程序,并从事件对象获取所点击的单元格的数据。为了简化代码并提高可维护性,我们可以将单元格的点击事件封装在一个自定义组件: <template> <td @click="showDialog">{{ value }}</td> </template> <script> export default { props: ['value'], methods: { showDialog() { // 显示弹框 } } } </script> 4. 最后,我们需要使用Element UI的Dialog组件来创建一个弹框,用来显示所选单元格的详细信息。我们可以在自定义组件的showDialog方法使用Dialog组件来实现: <template> <td @click="showDialog">{{ value }}</td> </template> <script> export default { props: ['value'], methods: { showDialog() { this.$alert(this.value, '详细信息', { confirmButtonText: '确定' }) } } } </script> 在上面这个例子,我们使用了Element UI的$alert方法来创建一个弹框,其的文本内容就是我们所点击单元格的数据。Dialog组件的具体使用方法可以在官方文档查看。 总结: 以上就是使用Vue和Element UI实现点击表格单元格后弹出弹框的简单实现方法。通过这个例子,我们可以看到Vue和Element UI的强大功能和易用性。如果你还不熟悉这两个框架,那么现在就是时候开始学习它们了!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值