• vue3 elmentPlus table实现列宽可拖拽


    最近公司项目里边需求要让表格的宽度可拖动,我们的公司的项目有vue2的也有vue3的,表格分别使用了element UI和element Plus,前者的社区比较丰富,我们使用了mizuka-wu/el-table-draggable

    但是对于后者,我查到社区相关的插件并不多,但也找到了guolaopi/element-plus-table-dragable-demo

    把demo下载下来之后,我发现其中引用了这个包,并在App.vue文件里边找到了所使用的demo

    "element-plus-table-dragable": "^1.0.0"
    
    • 1

    不过,问题是我在引入的时候却发现是有问题的,首先我们的table是封装到公共组件里边了,引入完成之后,会报两个错误,一个是引入报错,这个我直接添加了注释@ts-ignore把问题解决了
    在这里插入图片描述
    第二个问题就是引入之后控制台直接报directive的问题,也就是指令的问题,因为table里边使用了“v-dragable”这个指令,但是我直接在当前页面引入之后,这个指令并没有被注册,没办法,只能手动添加指令了

    首先在自定义指令文件中添加这样的文件

    import type { Directive, App } from 'vue';
    // @ts-ignore
    import { vDragable } from "element-plus-table-dragable";
    const dragableDirective: Directive = {
      mounted(el, binding) {
      },
      updated(el, binding) {
      },
      unmounted(el) {
      },
    };
    export function setupDragableDirective(app: App) {
      app.directive('dragable', vDragable);
    }
    export default vDragable;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在index页面进行引入

    import type { App } from 'vue';
    import { setupDragableDirective } from './dragable';
    
    export function setupGlobDirectives(app: App) {
      setupDragableDirective(app)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在main.js中初始化

    import App from "./App.vue";
    import { createApp } from "vue";
    import { setupGlobDirectives } from '@/directives';
    
    function init(){
      const app = createApp(App);
      setupGlobDirectives(app);
      app.mount("#app");
    }
    
    init()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    其他的部分了话,就可以直接写在相应的table组件中了。至此,可拖拽功能实现

    但是在这些实现完成之后,我发使用官方的配置的情况下表格是可以行列拖拽的,这点是不太符合需求的,我们只希望列宽可以拖拽,于是我将官方的配置进行了修改,将里边的“thead”、“tbody”替换成了“colgroup”

    const dragOptions = [{
    	selector: "colgroup",
    	option: {}
    }]
    
    • 1
    • 2
    • 3
    • 4

    至此,需求实现

  • 相关阅读:
    Nginx搭建Rtmp流媒体服务,并使用Ffmpeg推流
    网络层——IP协议
    护眼灯频闪是什么意思?无频闪护眼灯哪个好
    hive升级HiveException java. lang. RuntimeException
    Nexus3 部署备份与恢复
    设置代理服务器
    2022年大一期末作业——音乐网页(纯html+css+js实现)
    【敬伟ps教程】制图操作
    基于ssm的固定收益营销系统设计与实现(ERP系统)
    公交查询系统
  • 原文地址:https://blog.csdn.net/weixin_42880088/article/details/126387529