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检测客户端不是firefox则提示下载
Apr 07 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
Dec 29 Javascript
JavaScript调用客户端的可执行文件(示例代码)
Nov 28 Javascript
JS设置获取cookies的方法
Jan 26 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
Jan 24 Javascript
vue中的非父子间的通讯问题简单的实例代码
Jul 19 Javascript
javascript 开发之网页兼容各种浏览器
Sep 28 Javascript
js 数组详细操作方法及解析合集
Jun 01 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
Aug 24 Javascript
javascript实现手动点赞效果
Apr 09 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
Oct 02 Javascript
vue 封装面包屑组件教程
Nov 16 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
在WIN98下以apache模块方式安装php
2006/10/09 PHP
PHP 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
PHP内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
php封装的smarty类完整实例
2016/10/19 PHP
PHP命名空间与自动加载机制的基础介绍
2019/08/25 PHP
JScript的条件编译
2007/05/29 Javascript
ejs v9 javascript模板系统
2012/03/21 Javascript
jquery插件如何使用 jQuery操作Cookie插件使用介绍
2012/12/15 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
动态加载jquery库的方法
2014/02/12 Javascript
Jquery easyui 实现动态树
2015/11/17 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
关于数据与后端进行交流匹配(点亮星星)
2016/08/03 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
使用Bootrap和Vue实现仿百度搜索功能
2017/10/26 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
[01:14]3.19DOTA2发布会 三代刀塔人第二代
2014/03/25 DOTA
Python常见工厂函数用法示例
2018/03/21 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
美国嘻哈首饰购物网站:Hip Hop Bling
2016/12/30 全球购物
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
木马的传播途径主要有哪些
2016/04/08 面试题
满月酒主持词
2014/03/27 职场文书
2014年保密工作总结
2014/11/22 职场文书
稽核岗位职责
2015/02/10 职场文书
酒店财务经理岗位职责
2015/04/08 职场文书
js 数组 fill() 填充方法
2021/11/02 Javascript
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技