vue 使用lodash实现对象数组深拷贝操作


Posted in Javascript onSeptember 10, 2020

我就废话不多说了,大家还是直接看代码吧~

<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实现对象数组深拷贝操作

如果本篇文章对你有帮助的话,很高兴能够帮助上你。

补充知识:vue iview上传多文件只发送一次ajax请求,并根据上传进度显示上传进度条

前言

基于iview的上传组件(Upload)以及进度条组件(Progress)

思路

使用Upload组件提供的上传文件之前的钩子,将所有上传文件拦截下来,保存在本地临时数组,使用axios来进行上传

vue 使用lodash实现对象数组深拷贝操作

完整示例

进度条部分,请上传一个大文件来查看效果

<template>
 <Form :model="formData" :label-width="80">
  <FormItem class="upload" label="上传文件">
   <Upload
    :before-upload="handleUpload"
    :action="''"
    :multiple="true"
   >
    <Button icon="ios-cloud-upload-outline">请选择附件</Button>
   </Upload>
   <!-- 进度条 -->
   <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: [] // 临时数组,同时用于显示在页面
   },
   // 上传配置
   upload: {
    look: true, // 控制多文件上传,只触发一次ajax请求
    fileProgressShow: false, // 进度条
    fileProgress: 0 // 进度条进度
   }
  };
 },
 methods: {
  handleUpload(selectFile) {
   // 临时数组,同时用于显示在页面
   this.formData.dispalyFile.push(selectFile)
   // 控制多文件上传,只触发一次ajax请求
   if (this.upload.look) {
    this.upload.look = false;
    // 延迟请求,等待所有文件都从本地读取完毕
    setTimeout(() => {
     let formData = new FormData();
     this.formData.dispalyFile.map(item => {
      // files为后台接收参数
      // []为多文件数组
      formData.append('files[]', item);
     })
     axios.request({
      url: '/upload',
      method: 'post',
      data: formData,
      headers: { 'Content-Type': 'multipart/form-data' },
      onUploadProgress: (progressEvent) => {
       // 用于上传过程中显示进度条
       if (progressEvent.lengthComputable) {
        // 显示进度条
        this.upload.fileProgressShow = true;
        // 计算当前进度
        let curValue = (progressEvent.loaded / progressEvent.total * 100).toFixed(0);
        // 赋值给进度条组件
        this.upload.fileProgress = parseInt(curValue);
       }
      }
     })
      .then(res => {
       // 上传成功处理
       // 隐藏进度条
       this.upload.fileProgressShow = false;
      })
      .catch(() => {
       // 上传失败处理
       // 隐藏进度条
       this.upload.fileProgressShow = false;
      })
    }, 50);
   }
   return false;
  }
 }
};
</script>

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

效果图

上传多文件,只进行了一次ajax请求,这里xlz是一个超大压缩包,用于展示进度条效果, binary 为二进制文件

vue 使用lodash实现对象数组深拷贝操作

如果本篇文章对你有帮助的话,很高兴能够帮助上你。希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 获取图片颜色
Apr 05 Javascript
jquery tools系列 expose 学习
Sep 06 Javascript
判断用户是否在线的代码
Mar 05 Javascript
JavaScript自定义日期格式化函数详细解析
Jan 14 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
Feb 26 Javascript
jQuery实现简易的天天爱消除小游戏
Oct 16 Javascript
跟我学习javascript的垃圾回收机制与内存管理
Nov 23 Javascript
jQuery Mobile和HTML5开发App推广注册页
Nov 07 Javascript
微信小程序 仿猫眼实现实例代码
Mar 14 Javascript
Angular5中调用第三方js插件的方法
Feb 26 Javascript
webpack external模块的具体使用
Mar 10 Javascript
JS关于刷新页面的相关总结
May 09 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
Sep 10 #Javascript
vue 导出文件,携带请求头token操作
Sep 10 #Javascript
vue radio单选框,获取当前项(每一项)的value值操作
Sep 10 #Javascript
jquery实现简单每周轮换的日历
Sep 10 #jQuery
vue循环中点击选中再点击取消(单选)的实现
Sep 10 #Javascript
详解vue父子组件状态同步的最佳方式
Sep 10 #Javascript
vue使用echarts实现水平柱形图实例
Sep 09 #Javascript
You might like
程序员编程十条戒律
2009/07/09 PHP
php数组函数序列之in_array() 查找数组值是否存在
2011/10/29 PHP
php图片加中文水印实现代码分享
2012/10/31 PHP
再谈PHP中单双引号的区别详解
2016/06/12 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
JavaScript 格式字符串的应用
2010/03/29 Javascript
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
png在IE6 下无法透明的解决方法汇总
2015/05/21 Javascript
纯js实现悬浮按钮组件
2016/12/17 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
vue组件之间通信方式实例总结【8种方式】
2019/02/22 Javascript
浅谈javascript中的prototype和__proto__的理解
2019/04/07 Javascript
vue实现前台列表数据过滤搜索、分页效果
2019/05/28 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
详解vue路由
2020/08/05 Javascript
实例讲解Python中的私有属性
2014/08/21 Python
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
python 不以科学计数法输出的方法
2018/07/16 Python
Python3实现二叉树的最大深度
2019/09/30 Python
python 并发下载器实现方法示例
2019/11/22 Python
django创建超级用户时指定添加其它字段方式
2020/05/14 Python
详解Python多线程下的list
2020/07/03 Python
python 利用matplotlib在3D空间绘制二次抛物面的案例
2021/02/06 Python
Python 里最强的地图绘制神器
2021/03/01 Python
SQL里面如何插入自动增长序列号字段
2012/03/29 面试题
物流合作计划书
2014/01/10 职场文书
中国央视网签名寄语
2014/01/18 职场文书
信用社竞聘演讲稿
2014/05/16 职场文书
世界读书日的活动方案
2014/08/20 职场文书
写给领导的感谢信
2015/01/22 职场文书
妇产科护理心得体会
2016/01/22 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书