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 相关文章推荐
网页自动刷新,不产生嗒嗒声的一个解决方法
Mar 27 Javascript
JavaScript性能陷阱小结(附实例说明)
Dec 28 Javascript
js用Date对象处理时间实现思路及代码
Jan 31 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
Jun 24 Javascript
解决checkbox的attr(checked)一直为undefined问题
Jun 16 Javascript
如何正确使用javascript 来进行我们的程序开发
Jun 23 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
Nov 18 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
Dec 08 Javascript
jQuery插件FusionCharts绘制的3D饼状图效果实例【附demo源码下载】
Mar 03 Javascript
js is_valid_filename验证文件名的函数
Jul 19 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
Jan 09 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
May 04 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
通过文字传递创建的图形按钮
2006/10/09 PHP
深入解析php中的foreach问题
2013/06/30 PHP
PHP empty函数报错解决办法
2014/03/06 PHP
php 删除cookie方法详解
2014/12/01 PHP
php动态变量定义及使用
2015/06/10 PHP
PHP中set error handler函数用法小结
2015/11/11 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
带左右箭头图片轮播的JS代码
2013/12/18 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
2014/03/20 Javascript
JavaScript 基本概念
2015/01/20 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
Javascript中神奇的this
2016/01/20 Javascript
jquery ui dialog替代confirm实例分析
2016/01/25 Javascript
jQuery中判断对象是否存在的方法汇总
2016/02/24 Javascript
jQuery实现Select左右复制移动内容
2016/08/05 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
Angular2开发——组件规划篇
2017/03/28 Javascript
Django1.3添加app提示模块不存在的解决方法
2014/08/26 Python
利用python爬取散文网的文章实例教程
2017/06/18 Python
Python常见数字运算操作实例小结
2019/03/22 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
利用Python校准本地时间的方法教程
2019/10/31 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
基于python图像处理API的使用示例
2020/04/03 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
用python发送微信消息
2020/12/21 Python
HTML5文档结构标签
2017/04/21 HTML / CSS
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
毕业生自我鉴定
2013/12/04 职场文书
俞敏洪励志演讲稿
2014/04/29 职场文书
营业员岗位职责范本
2015/04/14 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
利用Python+OpenCV三步去除水印
2021/05/28 Python
你喜欢篮球吗?Python实现篮球游戏
2021/06/11 Python