vue element upload组件 file-list的动态绑定实现


Posted in Javascript onOctober 11, 2019

本文解决,upload组件 file-list的动态绑定list1,list2 ...,实现动态添加,相信很多电商后台管理系统都会遇到这个需求,例子如下

vue element upload组件 file-list的动态绑定实现

本例,我是使用的upload默认的上传地址(很多图片不能上传,你可以在本地截几张图片,进行测试),我可以上传多张活动图片,可以加相应的,名称,链接描述等,如果有多个活动,可以点击添加活动,在第二个活动又能添加相应的内容,保存完之后,可以实现回显,活动详情页可以看到添加的几个活动和相应的活动内容。

实现方法不为一,这是一种特别简单的。代码如下

<template>
 <div class="view">
  <div class="item" v-for="(item,index) in formList" :key="index">
   <div style="font-size: 14px; color: #606266;line-height: 40px;">相关图片资料</div>
   <el-upload
    action="https://jsonplaceholder.typicode.com/posts/"
    list-type="picture-card"
    :on-preview="handlePictureCardPreview"
    :on-remove="(file, fileList)=>{return handleRemove(file, fileList, index)}"
    :limit="5"
    :on-exceed="onExceed"
    :file-list="item.pics"
    :on-success="(response, file, fileList)=>{return onSuccess(response, file, fileList, index)}"
   >
    <i class="el-icon-plus"></i>
   </el-upload>
   <el-dialog :visible.sync="dialogVisible">
    <img width="100%" :src="dialogImageUrl" alt />
   </el-dialog>
   <el-form label-position="top" label-width="80px" :model="item">
    <el-row :gutter="20">
     <el-col :span="12">
      <el-form-item label="活动名称">
       <el-input v-model="item.name"></el-input>
      </el-form-item>
     </el-col>
     <el-col :span="12">
      <el-form-item label="活动链接">
       <el-input v-model="item.content"></el-input>
      </el-form-item>
     </el-col>
    </el-row>
   </el-form>
   <el-button type="danger" @click="delItem(index)" style="margin-bottom:20px">删除</el-button>
  </div>
  <el-button type="success" @click="addItem" style="width:1000px">添加活动</el-button>
  <el-button type="primary" @click="saveItem" style="margin-top:20px;margin-left:0;">保存活动</el-button>
 </div>
</template>
 
<script>
export default {
 name: "HelloWorld",
 data() {
  return {
   dialogImageUrl: "",
   dialogVisible: false,
   formList: [{ pics: [] }]
  };
 },
 methods: {
  // 上传图片
  onSuccess(response, file, fileList, idx) {
   // 这里是element的上传地址,对应的name,url,自己打印fileList对照
   this.formList[idx].pics.push({ name: file.name, url: file.url });
  },
  // 移除图片
  handleRemove(file, fileList, idx) {
   let Pics = this.formList[idx].pics;
   Pics.forEach((item, index) => {
    if (file.name == item.name) {
     Pics.splice(index, 1);
    }
   });
  },
  // 查看图片
  handlePictureCardPreview(file) {
   this.dialogImageUrl = file.url;
   this.dialogVisible = true;
  },
  onExceed(file, fileList) {
   this.$message({
    type: "warning",
    message: "最多上传5张"
   });
  },
  // 添加活动
  addItem() {
   this.formList.push({ pics: [] });
  },
  // 删除活动
  delItem(idx) {
   if (this.formList.length > 1) {
    this.formList.splice(idx, 1);
   } else this.formList = [{ pics: [] }];
  },
  // 保存活动
  saveItem() {
   this.$message({
    type: "success",
    message: "保存成功,可以刷新下试试回显效果"
   });
   console.log(this.formList);
   localStorage.setItem("formList", JSON.stringify(this.formList));
  }
 },
 created() {
  this.formList = JSON.parse(localStorage.getItem("formList"))|| [
   { pics: [] }
  ];;
 }
};
</script>
 
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.view {
 width: 1000px;
 margin: 0 auto;
}
.item {
 width: 100%;
}
</style>

主要实现,动态添加多个item,每个item都有对应的多张图文和介绍,可以删除,保存,下次进来可以回显继续编辑,详情展示页可以展示

github地址,可以clone下来,本地跑一下看看

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS画5角星方法介绍
Sep 17 Javascript
DOM基础教程之使用DOM控制表格
Jan 20 Javascript
jQuery检测鼠标左键和右键点击的方法
Mar 17 Javascript
js判断价格,必须为数字且不能为负数的实现方法
Oct 07 Javascript
JavaScript实现页面无操作倒计时退出
Oct 22 Javascript
简单易懂的天气插件(代码分享)
Feb 04 Javascript
超全面的vue.js使用总结
Feb 12 Javascript
mui上拉加载功能实例详解
Apr 13 Javascript
基于JavaScript实现的顺序查找算法示例
Apr 14 Javascript
ES6使用export和import实现模块化的方法
Sep 10 Javascript
抖音上用记事本编写爱心小程序教程
Apr 17 Javascript
webpack5 联邦模块介绍详解
Jul 08 Javascript
解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题
Oct 11 #Javascript
微信小程序 点击切换样式scroll-view实现代码实例
Oct 11 #Javascript
vue控制多行文字展开收起的实现示例
Oct 11 #Javascript
这15个Vue指令,让你的项目开发爽到爆
Oct 11 #Javascript
js脚本中执行java后台代码方法解析
Oct 11 #Javascript
基于js实现复制内容到操作系统粘贴板过程解析
Oct 11 #Javascript
ES6之Proxy的get方法详解
Oct 11 #Javascript
You might like
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
PHP获取某个月最大天数(最后一天)的方法
2015/07/29 PHP
Thinkphp 中 distinct 的用法解析
2016/12/14 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
2015/12/17 Javascript
原生javascript 学习之js变量全面了解
2016/07/14 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
2016/09/15 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
2020/02/19 Javascript
Vue使用鼠标在Canvas上绘制矩形
2020/12/24 Vue.js
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
[01:14]英雄,所敬略同——2018完美盛典宣传视频
2018/12/05 DOTA
[01:33:30]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第二场 2月5日
2021/03/11 DOTA
利用matplotlib+numpy绘制多种绘图的方法实例
2017/05/03 Python
python中Switch/Case实现的示例代码
2017/11/09 Python
pytorch 模型可视化的例子
2019/08/17 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
2020/10/29 Python
梅西酒窖:Macy’s Wine Cellar
2018/01/07 全球购物
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
Watchshop德国:欧洲在线手表No.1
2019/06/20 全球购物
超市营业员求职简历的自我评价
2013/10/17 职场文书
运动会解说词200字
2014/02/06 职场文书
演讲稿的写法
2014/05/19 职场文书
化工工艺设计求职信
2014/06/25 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
罚站检讨书
2015/01/29 职场文书
庆七一晚会主持词
2015/06/30 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
Django与数据库交互的实现
2021/06/03 Python
node.js如何自定义实现一个EventEmitter
2021/07/16 Javascript