zoukankan      html  css  js  c++  java
  • ant vue 项目入坑

    table 的列可以拖动

    问题1 :demo 无法运行

    1. 直接拷贝代码过来,发现传的参数有问题:

    <template>
      <a-table bordered :columns="columns" :components="components" :dataSource="data">
        <template v-slot:action>
          <a href="javascript:;">Delete</a>
        </template>
      </a-table>
    </template>
    
    <script>
    import Vue from 'vue';
    import VueDraggableResizable from 'vue-draggable-resizable';
    
    Vue.component('vue-draggable-resizable', VueDraggableResizable);
    const columns = [
      {
        title: 'Date',
        dataIndex: 'date',
         200,
      },
      {
        title: 'Amount',
        dataIndex: 'amount',
         100,
      },
      {
        title: 'Type',
        dataIndex: 'type',
         100,
      },
      {
        title: 'Note',
        dataIndex: 'note',
         100,
      },
      {
        title: 'Action',
        key: 'action',
        scopedSlots: { customRender: 'action' },
      },
    ];
    const data = [
      {
        key: 0,
        date: '2018-02-11',
        amount: 120,
        type: 'income',
        note: 'transfer',
      },
      {
        key: 1,
        date: '2018-03-11',
        amount: 243,
        type: 'income',
        note: 'transfer',
      },
      {
        key: 2,
        date: '2018-04-11',
        amount: 98,
        type: 'income',
        note: 'transfer',
      },
    ];
    const draggingMap = {};
    columns.forEach(col => {
      draggingMap[col.key] = col.width;
    });
    const draggingState = Vue.observable(draggingMap);
    const ResizeableTitle = (h, props, children) => {
      let thDom = null;
      const { key, ...restProps } = props;
      const col = columns.find(col => {
        const k = col.dataIndex || col.key;
        return k === key;
      });
      if (!col.width) {
        return <th {...restProps}>{children}</th>;
      }
      const onDrag = (x, y) => {
        draggingState[key] = 0;
        col.width = Math.max(x, 1);
      };
    
      const onDragstop = () => {
        draggingState[key] = thDom.getBoundingClientRect().width;
      };
      return (
        <th {...restProps} v-ant-ref={r => (thDom = r)} width={col.width} class="resize-table-th">
          {children}
          <vue-draggable-resizable
            key={col.key}
            class="table-draggable-handle"
            w={10}
            x={draggingState[key] || col.width}
            z={1}
            axis="x"
            draggable={true}
            resizable={false}
            onDragging={onDrag}
            onDragstop={onDragstop}
          ></vue-draggable-resizable>
        </th>
      );
    };
    export default {
      name: 'App',
      data() {
        this.components = {
          header: {
            cell: ResizeableTitle,
          },
        };
        return {
          data,
          columns,
        };
      },
    };
    </script>
    <style lang="less">
    .resize-table-th {
      position: relative;
      .table-draggable-handle {
        height: 100% !important;
        bottom: 0;
        left: auto !important;
        right: -5px;
        cursor: col-resize;
        touch-action: none;
      }
    }
    </style>
    

    2. 将标黄的部分改为,代码如下:

    const ResizeableTitle = (h1) => {
      const props = h1.props
      const children = h1.children
    

      

    问题二:应用到ant vue界面时,需要做如下修改:

    1. 将下列代码挪到main.js

    import VueDraggableResizable from 'vue-draggable-resizable'
    Vue.component('vue-draggable-resizable', VueDraggableResizable)
    

     2. 将下列代码copy过去。

    import Vue from 'vue'
    
    
    
    // #region 从Table1 拷贝的东东
    
    const draggingMap = {}
    columns.forEach(col => {
      draggingMap[col.Id] = col.width
    })
    
    const draggingState = Vue.observable(draggingMap)
    
    const ResizeableTitle = (h1) => {
      const props = h1.props
      const children = h1.children
      let thDom = null
      const { key, ...restProps } = props
      const col = columns.find(col => {
        const k = col.dataIndex || col.Id
        return k === key
      })
      if ((!col) || (!col.width)) {
        return <th {...restProps}>{children}</th>
      }
      const onDrag = (x, y) => {
        draggingState[key] = 0
        col.width = Math.max(x, 1)
      }
    
      const onDragstop = () => {
        draggingState[key] = thDom.getBoundingClientRect().width
      }
      return (
        <th {...restProps} v-ant-ref={r => (thDom = r)} width={col.width} class="resize-table-th">
          {children}
          <vue-draggable-resizable
            key={col.rowKey}
            class="table-draggable-handle"
            w={10}
            x={draggingState[key] || col.width}
            z={1}
            axis="x"
            draggable={true}
            resizable={false}
            onDragging={onDrag}
            onDragstop={onDragstop}
          ></vue-draggable-resizable>
        </th>
      )
    }
    // #endregion
    

      3. 拷贝样式

    <style lang="less">
    .resize-table-th {
      position: relative;
      .table-draggable-handle {
        height: 100% !important;
        bottom: 0;
        left: auto !important;
        right: -5px;
        cursor: col-resize;
        touch-action: none;
      }
    }
    </style>
    

    4. 表格的width=100 必须为数字的

    5.columns 操作列增加 key: 'action', Id: 'action'

    const columns = [

    ...

    { title: '操作', dataIndex: 'action', scopedSlots: { customRender: 'action' } }

    ]

    const columns = [
    ...
      { title: '操作', dataIndex: 'action', key: 'action', Id: 'action', scopedSlots: { customRender: 'action' } }
    ]


    6.<a-table>标签添加vue属性:components="components"

    <a-table
    ref="table"
    :components="components"
    :columns="columns"

    7.在data中增加 this.components

    export default {
      components: {
        EditForm
      },
      mounted () {
        this.getDataList()
      },
      data () {
        this.components = {
          header: {
            cell: ResizeableTitle
          }
        }
        return {
    

      

  • 相关阅读:
    逆光拍摄常见的问题(解决大光比问题)
    HDP和包围曝光
    直方图
    linux查找文件的命令【转】
    100篇大数据文章[转]
    squid
    修改/etc/resolv.conf又恢复到原来的状态?[转]
    python字符串及正则表达式[转]
    GraphLab介绍[转]
    Scala 中的 apply 和 update 方法[转]
  • 原文地址:https://www.cnblogs.com/gg_lihui/p/12195778.html
Copyright © 2011-2022 走看看