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中apply方法的使用详细解析
Nov 04 Javascript
Checbox的操作含已选、未选及判断代码
Nov 07 Javascript
JS中getYear()和getFullYear()区别分析
Jul 04 Javascript
js实现的简洁网页滑动tab菜单效果代码
Aug 24 Javascript
jQuery中on方法使用注意事项详解
Feb 15 Javascript
Node.js之网络通讯模块实现浅析
Apr 01 Javascript
javascript 中null和undefined区分和比较
Apr 19 Javascript
详解Vue路由开启keep-alive时的注意点
Jun 20 Javascript
JS实现监控微信小程序的原理
Jun 15 Javascript
Vue在页面数据渲染完成之后的调用方法
Sep 11 Javascript
js利用递归与promise 按顺序请求数据的方法
Aug 30 Javascript
Vue与React的区别和优势对比
Dec 18 Vue.js
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
dedecms模板标签代码官方参考
2007/03/17 PHP
php实现水仙花数示例分享
2014/04/03 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
PHP中常用的数组操作方法笔记整理
2016/05/16 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
javascript multibox 全选
2009/03/22 Javascript
jquery radio 操作代码
2011/03/16 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
jquery实现点击消失的代码
2014/03/03 Javascript
jquery下div 的resize事件示例代码
2014/03/09 Javascript
js判断游览器类型及版本号的代码
2014/05/11 Javascript
JQuery中attr方法和removeAttr方法用法实例
2015/05/18 Javascript
jquery仿QQ登录账号选择下拉框效果
2016/03/22 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
Angular.js中定时器循环的3种方法总结
2017/04/27 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
javascript用rem来做响应式开发
2018/01/13 Javascript
vue-cli项目中使用echarts图表实例
2018/10/22 Javascript
[01:01:41]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第二场 1月31日
2021/03/11 DOTA
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
python正则表达式的使用
2017/06/12 Python
浅谈flask中的before_request与after_request
2018/01/20 Python
通俗讲解python 装饰器
2020/09/07 Python
用python 绘制茎叶图和复合饼图
2021/02/26 Python
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
教师国庆节演讲稿范文2014
2014/09/21 职场文书
公司领导班子民主生活会对照检查材料
2014/10/02 职场文书
党委书记群众路线对照检查材料思想汇报
2014/10/04 职场文书
事业单位个人总结
2015/02/12 职场文书
求职推荐信范文
2015/03/27 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书
Python基础知识之变量的详解
2021/04/14 Python
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python
使用vuex-persistedstate本地存储vuex
2022/04/29 Vue.js