溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

vue 使用lodash如何實(shí)現(xiàn)對(duì)象數(shù)組的深拷貝

發(fā)布時(shí)間:2020-11-04 15:25:07 來(lái)源:億速云 閱讀:404 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

vue 使用lodash如何實(shí)現(xiàn)對(duì)象數(shù)組的深拷貝?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

<template>
 <div></div>
</template>

<script>
export default {
 mounted() {
  this.init();
 },
 methods: {
  init() {
   let lodash = require('lodash');
   let obj1 = {
    a: 1,
    b: { f: { g: 1 } },
    c: [1, 2, 3],
    h: () => {
     return 123;
    },
    k: undefined
   };
   let obj2 = lodash.cloneDeep(obj1);
   obj2.b.f.g = 2;
   obj2.c = [1, 2];
   obj2.h = 1;
   console.log(obj1);
   console.log(obj2);
  }
 }
};
</script>

vue 使用lodash如何實(shí)現(xiàn)對(duì)象數(shù)組的深拷貝

如果本篇文章對(duì)你有幫助的話,很高興能夠幫助上你。

補(bǔ)充知識(shí):vue iview上傳多文件只發(fā)送一次ajax請(qǐng)求,并根據(jù)上傳進(jìn)度顯示上傳進(jìn)度條

前言

基于iview的上傳組件(Upload)以及進(jìn)度條組件(Progress)

思路

使用Upload組件提供的上傳文件之前的鉤子,將所有上傳文件攔截下來(lái),保存在本地臨時(shí)數(shù)組,使用axios來(lái)進(jìn)行上傳

vue 使用lodash如何實(shí)現(xiàn)對(duì)象數(shù)組的深拷貝

完整示例

進(jìn)度條部分,請(qǐng)上傳一個(gè)大文件來(lái)查看效果

<template>
 <Form :model="formData" :label-width="80">
  <FormItem class="upload" label="上傳文件">
   <Upload
    :before-upload="handleUpload"
    :action="''"
    :multiple="true"
   >
    <Button icon="ios-cloud-upload-outline">請(qǐng)選擇附件</Button>
   </Upload>
   <!-- 進(jìn)度條 -->
   <Progress v-if="upload.fileProgressShow" :percent="upload.fileProgress" />
   <!-- 顯示列表 -->
   <ul>
    <li
     v-for="(item, index) of formData.dispalyFile"
     :key="index"
    >
     <span>{{ item.name }}</span>
     <Icon type="md-close" @click="handleRemove(index)" />
    </li>
   </ul>
  </FormItem>
 </Form>
</template>

<script>
import axios from 'axios';
export default {
 data() {
  return {
   formData: {
    dispalyFile: [] // 臨時(shí)數(shù)組,同時(shí)用于顯示在頁(yè)面
   },
   // 上傳配置
   upload: {
    look: true, // 控制多文件上傳,只觸發(fā)一次ajax請(qǐng)求
    fileProgressShow: false, // 進(jìn)度條
    fileProgress: 0 // 進(jìn)度條進(jìn)度
   }
  };
 },
 methods: {
  handleUpload(selectFile) {
   // 臨時(shí)數(shù)組,同時(shí)用于顯示在頁(yè)面
   this.formData.dispalyFile.push(selectFile)
   // 控制多文件上傳,只觸發(fā)一次ajax請(qǐng)求
   if (this.upload.look) {
    this.upload.look = false;
    // 延遲請(qǐng)求,等待所有文件都從本地讀取完畢
    setTimeout(() => {
     let formData = new FormData();
     this.formData.dispalyFile.map(item => {
      // files為后臺(tái)接收參數(shù)
      // []為多文件數(shù)組
      formData.append('files[]', item);
     })
     axios.request({
      url: '/upload',
      method: 'post',
      data: formData,
      headers: { 'Content-Type': 'multipart/form-data' },
      onUploadProgress: (progressEvent) => {
       // 用于上傳過(guò)程中顯示進(jìn)度條
       if (progressEvent.lengthComputable) {
        // 顯示進(jìn)度條
        this.upload.fileProgressShow = true;
        // 計(jì)算當(dāng)前進(jìn)度
        let curValue = (progressEvent.loaded / progressEvent.total * 100).toFixed(0);
        // 賦值給進(jìn)度條組件
        this.upload.fileProgress = parseInt(curValue);
       }
      }
     })
      .then(res => {
       // 上傳成功處理
       // 隱藏進(jìn)度條
       this.upload.fileProgressShow = false;
      })
      .catch(() => {
       // 上傳失敗處理
       // 隱藏進(jìn)度條
       this.upload.fileProgressShow = false;
      })
    }, 50);
   }
   return false;
  }
 }
};
</script>

<style scoped>
.upload {
 width: 40%;
}
</style>

效果圖

上傳多文件,只進(jìn)行了一次ajax請(qǐng)求,這里xlz是一個(gè)超大壓縮包,用于展示進(jìn)度條效果, binary 為二進(jìn)制文件

vue 使用lodash如何實(shí)現(xiàn)對(duì)象數(shù)組的深拷貝

看完上述內(nèi)容,你們掌握vue 使用lodash如何實(shí)現(xiàn)對(duì)象數(shù)組的深拷貝的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI