lodash-es 基本使用

avatar
作者
猴君
阅读量:2

中文文档: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">Add</a-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>Delete</a>         </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> 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!