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 相关文章推荐
jValidate 基于jQuery的表单验证插件
Dec 12 Javascript
QUnit jQuery的TDD框架
Nov 04 Javascript
JQuery替换DOM节点的方法
Jun 11 Javascript
jquery if条件语句的写法
May 19 Javascript
JavaScript事件学习小结(三)js事件对象
Jun 09 Javascript
js 判断各种数据类型的简单方法(推荐)
Aug 29 Javascript
jquery获取easyui日期控件的值实现方法
Nov 09 Javascript
JS重载实现方法分析
Dec 16 Javascript
Angular ElementRef简介及其使用
Oct 01 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
Jan 31 Javascript
ES6的异步终极解决方案分享
Jul 11 Javascript
vue解决跨域问题(推荐)
Nov 10 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 addslashes 利用递归实现使用反斜线引用字符串
2013/08/05 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
2017/06/16 PHP
2017年最好用的9个php开发工具推荐(超好用)
2017/10/23 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
2019/04/09 PHP
Laravel向公共模板赋值方法总结
2019/06/25 PHP
微信推送功能实现方式图文详解
2019/07/12 PHP
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
jquery $.trim()方法使用介绍
2014/05/21 Javascript
js对象继承之原型链继承实例
2015/01/10 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
DVA框架统一处理所有页面的loading状态
2017/08/25 Javascript
js中apply与call简单用法详解
2017/11/06 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
Vue引入jquery实现平滑滚动到指定位置
2018/05/09 jQuery
小程序云开发实战小结
2018/10/25 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
解决uWSGI的编码问题详解
2017/03/24 Python
多版本Python共存的配置方法
2017/05/22 Python
在Python中使用AOP实现Redis缓存示例
2017/07/11 Python
Python + selenium自动化环境搭建的完整步骤
2018/05/19 Python
基于python指定包的安装路径方法
2018/10/27 Python
Python绘制堆叠柱状图的实例
2019/07/09 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
Shein英国:女性时尚网上商店
2019/04/10 全球购物
英国豪华家具和经典家居饰品购物网站:OKA
2020/06/05 全球购物
大学生职业生涯规划方案
2014/01/03 职场文书
教师档案管理制度
2014/01/23 职场文书
购房协议书
2014/04/11 职场文书
竞选学委演讲稿
2014/09/13 职场文书