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 相关文章推荐
js CSS操作方法集合
Oct 31 Javascript
收集的10个免费的jQuery相册
Feb 26 Javascript
纯js写的分页表格数据为json串
Feb 18 Javascript
JS来动态的修改url实现对url的增删查改
Sep 05 Javascript
使用mouse事件实现简单的鼠标经过特效
Jan 30 Javascript
封装了jQuery的Ajax请求全局配置
Feb 05 Javascript
JS修改iframe页面背景颜色的方法
Apr 01 Javascript
swiper动态改变滑动内容的实现方法
Jan 17 Javascript
redux中间件之redux-thunk的具体使用
Apr 17 Javascript
AngularJS中ng-options实现下拉列表的数据绑定方法
Aug 13 Javascript
详解vue 路由跳转四种方式 (带参数)
Apr 28 Javascript
Three.js实现雪糕地球的使用示例详解
Jul 07 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
php 来访国内外IP判断代码并实现页面跳转
2009/12/18 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
PHP限制HTML内容中图片必须是本站的方法
2015/06/16 PHP
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
2012/11/11 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
JavaScript之Object类型介绍
2015/04/01 Javascript
JavaScript基本语法学习教程
2016/01/14 Javascript
jquery对象和DOM对象的相互转换详解
2016/10/18 Javascript
js 轮播效果实例分享
2016/12/28 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
2017/02/21 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
vue2 前后端分离项目ajax跨域session问题解决方法
2017/04/27 Javascript
详解Vue中过度动画效果应用
2017/05/25 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
2019/01/24 Javascript
JS实现从对象获取对象中单个键值的方法示例
2019/06/05 Javascript
JavaScript工具库之Lodash详解
2019/06/15 Javascript
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
jQuery实现日历效果
2020/09/11 jQuery
[56:29]Secret vs Optic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python处理中文编码和判断编码示例
2014/02/26 Python
在Python中使用next()方法操作文件的教程
2015/05/24 Python
python添加模块搜索路径方法
2017/09/11 Python
python单例模式获取IP代理的方法详解
2018/09/13 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
九年级化学教学反思
2014/01/28 职场文书
赔偿协议书范本
2014/04/15 职场文书
物业管理专业求职信
2014/06/11 职场文书
安全生产工作汇报
2014/10/28 职场文书
2014最新股权信托合同协议书
2014/11/18 职场文书
通知格式
2015/04/27 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书