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 相关文章推荐
使用JSLint提高JS代码质量方法分享
Dec 16 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
Jan 06 Javascript
JS动态增删表格行的方法
Mar 03 Javascript
深入理解angularjs过滤器
May 25 Javascript
Bootstrap Table的使用总结
Oct 08 Javascript
jQuery tip提示插件(实例分享)
Apr 28 jQuery
微信小程序之网络请求简单封装实例详解
Jun 28 Javascript
如何将 jQuery 从你的 Bootstrap 项目中移除(取而代之使用Vue.js)
Jul 17 jQuery
js获取文件里面的所有文件名(实例)
Oct 17 Javascript
JS正则表达式完美实现身份证校验功能
Oct 18 Javascript
JS实现二维数组元素的排列组合运算简单示例
Jan 28 Javascript
vue配置接口域名方法总结
May 12 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
2014最热门的24个php类库汇总
2014/12/18 PHP
Apache连接PHP后无法启动问题解决思路
2015/06/18 PHP
php使用curl详细解析及问题汇总
2016/08/11 PHP
学习ExtJS 访问容器对象
2009/10/07 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
2013/06/08 Javascript
二叉树先序遍历的非递归算法具体实现
2014/01/09 Javascript
ExtJS如何设置与获取radio控件的选取状态
2014/01/22 Javascript
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
关于Javascript 对象(object)的prototype
2014/05/09 Javascript
Js为表单动态添加节点内容的方法
2015/02/10 Javascript
招聘网站基于jQuery实现自动刷新简历
2015/05/10 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
2015/09/06 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
2015/10/29 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
jquery实现页面加载效果
2017/02/21 Javascript
微信小程序 开发MAP(地图)实例详解
2017/06/27 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
[48:48]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Dream TIME
2014/05/21 DOTA
python定时复制远程文件夹中所有文件
2019/04/30 Python
python实现得到当前登录用户信息的方法
2019/06/21 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
2020/04/20 Python
如何在Python对Excel进行读取
2020/06/04 Python
python中sys模块是做什么用的
2020/08/16 Python
Python logging自定义字段输出及打印颜色
2020/11/30 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
学院领导推荐信
2013/10/30 职场文书
美容院考勤制度
2014/01/30 职场文书
经营管理策划方案
2014/05/22 职场文书
苦儿流浪记读书笔记
2015/07/01 职场文书
高一地理教学工作总结
2015/08/12 职场文书
优质服务标语口号
2015/12/26 职场文书
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python