Vue3 Element Plus el-table-column Sortable 排序失效

问题描述:

vue3中 element plus 中 el-table 的 el-table-column使用了插槽后,为什么sortable不起效果,不能点击排序

          <el-table-column
            label="记账日期"
            width="110"
            fixed="left"
            header-align="left"
            sortable
            show-overflow-tooltip>
            <template #default="scope">
              {{ formatDate(scope.row.jzDatetime, "YYYY-MM-DD") }}
            </template>
          </el-table-column>

在 Element Plus 的 el-table 中,当 el-table-column 使用插槽自定义内容时,若未指定 prop 属性,会导致 sortable 排序功能失效。因为表格需要根据 prop 确定排序的字段。即使内容经过格式化,排序仍基于原始数据字段。

解决方案:为 el-table-column 添加 prop 属性,指向对应的数据字段名:

vue

复制

下载

<el-table-column
  prop="jzDatetime" <!-- 添加 prop 指定排序字段 -->
  label="记账日期"
  width="110"
  fixed="left"
  header-align="left"
  sortable
  show-overflow-tooltip
>
  <template #default="scope">
    {{ formatDate(scope.row.jzDatetime, "YYYY-MM-DD") }}
  </template>
</el-table-column>

注意事项:

  1. 数据类型正确性:确保 jzDatetime 字段的值是适合排序的类型(如时间戳或 Date 对象)。若为字符串,需保证格式可直接比较(如 YYYY-MM-DD)。

  2. 自定义排序规则:若需按格式化后的值排序(如字符串日期),可使用 sort-method 自定义排序逻辑:

    vue

    复制

    下载

    <el-table-column
      :sort-method="(a, b) => customSort(a.jzDatetime, b.jzDatetime)"
      <!-- 其他属性 -->
    >

    js

    复制

    下载

    const customSort = (a, b) => {
      // 实现自定义排序逻辑
      return new Date(a) - new Date(b);
    };

添加 prop 后,表格即可根据指定字段触发默认排序,点击表头即可正常排序。

          <el-table-column
            prop="jzDatetime"
            label="记账日期"
            width="110"
            fixed="left"
            header-align="left"
            sortable
            show-overflow-tooltip>
            <template #default="scope">
              {{ formatDate(scope.row.jzDatetime, "YYYY-MM-DD") }}
            </template>
          </el-table-column>

### Vue3 Element Plus El-Table 行拖拽功能实现 为了实现在 `Vue3` 中使用 `Element Plus` 的 `el-table` 组件来达到行拖拽的效果,需引入第三方库 `SortableJS` 来辅助完成此操作。通过该方法不仅能够轻松实现行之间的顺序调整,还能确保用户体验流畅自然。 #### 安装依赖包 首先,在项目中安装 `sortablejs`: ```bash npm install sortablejs --save ``` #### 导入并初始化 Sortable 接着,在组件内部导入 `Sortable` 并对其进行初始化设置。这一步骤至关重要,因为只有当表格渲染完成后才能正确应用拖拽逻辑[^2]。 #### HTML 结构定义 在模板部分定义好基础结构,注意给 `<el-table>` 设置唯一标识符以便后续挂载事件监听器,并指定 `row-key` 属性用于区分每一行记录的独特性[^3]。 ```html <template> <div class="example"> <!-- 使用ref属性关联DOM节点 --> <el-table ref="dragTable" :data="list" border row-key="id"> <el-table-column prop="date" label="日期"></el-table-column> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> </div> </template> ``` #### JavaScript 部分处理 最后,在脚本区域编写必要的业务逻辑代码,包括但不限于创建一个新的实例化对象以及绑定相应的事件处理器等动作。这里展示了如何利用生命周期钩子函数 `mounted()` 来触发一次性的初始化过程[^1]。 ```javascript <script setup lang="ts"> import { onMounted } from &#39;vue&#39;; import Sortable from &#39;sortablejs&#39;; // 示例数据列表 const list = [ { id: 1, date: "2016-05-02", name: "王小虎", address: "上海市普陀区金沙江路 1518 弄" }, // 更多条目... ]; onMounted(() => { const el = document.querySelector(&#39;.example .el-table__body-wrapper tbody&#39;); new Sortable(el, { animation: 150, ghostClass: &#39;sortable-ghost&#39;, // Class name for the drop placeholder chosenClass: &#39;sortable-chosen&#39;, onUpdate(event) { console.log(&#39;更新后的索引:&#39;, event.newIndex); // 更新本地状态中的数组项位置 const oldItem = list.splice(event.oldIndex, 1)[0]; list.splice(event.newIndex, 0, oldItem); // 或者直接修改原始数据源 (如果适用的话) // this.$emit(&#39;update:list&#39;, [...this.list]); } }); }); </script> <style scoped> .sortable-ghost{ opacity: 0.7; } .sortable-chosen{ background-color:#4AB7BD !important; } </style> ``` 上述示例完整地描述了一个基于 `Vue3` 和 `Element Plus` 构建的支持行级拖拽排序的表格案例。其中涉及到的关键技术点有:借助外部插件增强原生HTML元素的功能;合理运用框架特性简化开发流程;注重细节优化提升交互体验等方面的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值