• lodash-es 基本使用


    中文文档:https://www.lodashjs.com/

    cloneDeep方法文档:https://www.lodashjs.com/docs/lodash.cloneDeep#_clonedeepvalue

    在这里插入图片描述

    参考掘金文章:https://juejin.cn/post/7354940462061715497
    在这里插入图片描述

    在这里插入图片描述

    安装:

    pnpm install lodash-es
    

    npm地址:https://www.npmjs.com/package/lodash-es

    github地址:https://github.com/lodash/lodash

    在antd组件库中的使用示例:

    <template>
      <a-button class="editable-add-btn" style="margin-bottom: 8px" @click="handleAdd">Adda-button>
      <a-table bordered :data-source="dataSource" :columns="columns">
        <template #bodyCell="{ column, text, record }">
          <template v-if="column.dataIndex === 'name'">
            <div class="editable-cell">
              <div v-if="editableData[record.key]" class="editable-cell-input-wrapper">
                <a-input v-model:value="editableData[record.key].name" @pressEnter="save(record.key)" />
                <check-outlined class="editable-cell-icon-check" @click="save(record.key)" />
              div>
              <div v-else class="editable-cell-text-wrapper">
                {{ text || ' ' }}
                <edit-outlined class="editable-cell-icon" @click="edit(record.key)" />
              div>
            div>
          template>
          <template v-else-if="column.dataIndex === 'operation'">
            <a-popconfirm
                v-if="dataSource.length"
                title="Sure to delete?"
                @confirm="onDelete(record.key)"
            >
              <a>Deletea>
            a-popconfirm>
          template>
        template>
      a-table>
    template>
    <script setup>
    import { computed, reactive, ref } from 'vue';
    import {CheckOutlined, EditOutlined} from "@ant-design/icons-vue";
    import { cloneDeep } from 'lodash-es';
    
    const columns = [
      {
        title: 'name',
        dataIndex: 'name',
        width: '30%',
      },
      {
        title: 'age',
        dataIndex: 'age',
      },
      {
        title: 'address',
        dataIndex: 'address',
      },
      {
        title: 'operation',
        dataIndex: 'operation',
      },
    ];
    const dataSource = ref([
      {
        key: '0',
        name: 'Edward King 0',
        age: 32,
        address: 'London, Park Lane no. 0',
      },
      {
        key: '1',
        name: 'Edward King 1',
        age: 32,
        address: 'London, Park Lane no. 1',
      },
    ]);
    const count = computed(() => dataSource.value.length + 1);
    const editableData = reactive({});
    const edit = key => {
      editableData[key] = cloneDeep(dataSource.value.filter(item => key === item.key)[0]);
    };
    const save = key => {
      Object.assign(dataSource.value.filter(item => key === item.key)[0], editableData[key]);
      delete editableData[key];
    };
    const onDelete = key => {
      dataSource.value = dataSource.value.filter(item => item.key !== key);
    };
    const handleAdd = () => {
      const newData = {
        key: `${count.value}`,
        name: `Edward King ${count.value}`,
        age: 32,
        address: `London, Park Lane no. ${count.value}`,
      };
      dataSource.value.push(newData);
    };
    script>
    <style lang="less" scoped>
    .editable-cell {
      position: relative;
      .editable-cell-input-wrapper,
      .editable-cell-text-wrapper {
        padding-right: 24px;
      }
    
      .editable-cell-text-wrapper {
        padding: 5px 24px 5px 5px;
      }
    
      .editable-cell-icon,
      .editable-cell-icon-check {
        position: absolute;
        right: 0;
        width: 20px;
        cursor: pointer;
      }
    
      .editable-cell-icon {
        margin-top: 4px;
        display: none;
      }
    
      .editable-cell-icon-check {
        line-height: 28px;
      }
    
      .editable-cell-icon:hover,
      .editable-cell-icon-check:hover {
        color: #108ee9;
      }
    
      .editable-add-btn {
        margin-bottom: 8px;
      }
    }
    .editable-cell:hover .editable-cell-icon {
      display: inline-block;
    }
    style>
    
  • 相关阅读:
    excel修改批量一列单价的金额并保留1位小数
    Delphi主窗体实现透明
    01-Window10安装Redis
    LoRa和LoRaWAN有什么区别?工业网关能用吗?
    基于神经网络的帧内预测和变换核选择
    一名程序员的电脑桌面
    AI全栈大模型工程师(七)内容审核
    未来十年将是Web3.0发展的黄金十年
    批量手机号码归属地查询工具
    Linux驱动开发 问题随笔
  • 原文地址:https://blog.csdn.net/qq_37703224/article/details/140227998