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 相关文章推荐
JQUBar 基于JQUERY的柱状图插件
Nov 23 Javascript
javascript开发技术大全-第3章 js数据类型
Jul 03 Javascript
js中eval详解
Mar 30 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
Jun 08 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
Jun 18 Javascript
javascript 10进制和62进制的相互转换
Jul 31 Javascript
初步认识JavaScript函数库jQuery
Jun 18 Javascript
JavaScript实现省市联动过程中bug的解决方法
Dec 04 Javascript
Mac中安装nvm的教程分享
Dec 11 Javascript
React+Webpack快速上手指南(小结)
Aug 15 Javascript
小程序实现锚点滑动效果
Sep 23 Javascript
JavaScript 实现页面滚动动画
Apr 24 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
THINKPHP2.0到3.0有哪些改进之处
2015/01/04 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
php中实现获取随机数组列表的自定义函数
2015/04/02 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
删除重复数据的算法
2006/11/23 Javascript
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
JS+ACTIVEX实现网页选择本地目录路径对话框
2013/03/18 Javascript
Highcharts 非常实用的Javascript统计图demo示例
2013/07/03 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
Easyui form combobox省市区三级联动
2016/01/13 Javascript
深入理解JS中的substr和substring
2016/04/26 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
遍历js中对象的属性和值的实例
2016/11/21 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
常见的浏览器Hack技巧整理
2017/06/29 Javascript
简述pm2常用命令集合及配置文件说明
2019/05/30 Javascript
JavaScript跳出循环的三种方法(break, return, continue)
2019/07/30 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
jQuery实现二级导航菜单的示例
2020/09/30 jQuery
Python脚本实现网卡流量监控
2015/02/14 Python
pygame播放音乐的方法
2015/05/19 Python
在Python中操作字典之setdefault()方法的使用
2015/05/21 Python
Python实现队列的方法
2015/05/26 Python
使用Python写个小监控
2016/01/27 Python
python去掉空白行的多种实现代码
2018/03/19 Python
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
Jupyter notebook如何修改平台字体
2020/05/13 Python
CSS3实现简易版的刮刮乐效果
2016/09/27 HTML / CSS
吸烟检讨书2000字
2014/02/13 职场文书
少先队学雷锋活动总结范文
2014/03/09 职场文书
2014年商场国庆节活动策划方案
2014/09/16 职场文书
2016保送生自荐信范文
2016/01/29 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS