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 相关文章推荐
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
Oct 23 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
Feb 06 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
Jul 21 Javascript
JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
Aug 04 Javascript
jQuery内容过滤选择器用法示例
Sep 09 Javascript
js获取腾讯视频ID的方法
Oct 03 Javascript
Vue.js之slot深度复制详解
Mar 10 Javascript
详解从买域名到使用pm2部署node.js项目全过程
Mar 07 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
Aug 13 Javascript
浅析vue中的MVVM实现原理
Mar 04 Javascript
微信小程序封装分享与分销功能过程解析
Aug 13 Javascript
vue flex 布局实现div均分自动换行的示例代码
Aug 05 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 动态随机生成验证码类代码
2010/04/09 PHP
简单的自定义php模板引擎
2016/08/26 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
PHP创建XML接口示例
2019/07/04 PHP
jQuery 操作option的实现代码
2011/03/03 Javascript
Jquery事件的连接使用示例
2013/06/18 Javascript
基于NodeJS的前后端分离的思考与实践(二)模版探索
2014/09/26 NodeJs
JQuery动画与特效实例分析
2015/02/02 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
原生JS实现拖拽图片效果
2020/08/27 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
2016/03/02 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
webpack构建换肤功能的思路详解
2017/11/27 Javascript
在Vue项目中引入JQuery-ui插件的讲解
2019/01/27 jQuery
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
微信小程序自定义弹出层效果
2020/05/26 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
python登陆asp网站页面的实现代码
2015/01/14 Python
Python Matplotlib库入门指南
2015/05/18 Python
在 Python 应用中使用 MongoDB的方法
2017/01/05 Python
Python语言描述机器学习之Logistic回归算法
2017/12/21 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
2020/01/14 Python
Python插件机制实现详解
2020/05/04 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
Keds官方网站:购买帆布运动鞋和经典皮鞋
2016/11/12 全球购物
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
美国医生配方营养补充剂供应商:Healthy Directions
2019/07/10 全球购物
化工工艺专业求职信
2013/09/22 职场文书
离婚起诉书范文2015
2015/05/19 职场文书
python3读取文件指定行的三种方法
2021/05/24 Python