微信小程序组件:多图上传

2023-11-14

由于在小程序开发过程中多次用到图片上传功能,在最近一次项目开发时,决定将其打包成组件来提高复用性。

首先,在components文件夹下 新建Component,名称为 image-uploader

image-uploader.wxml

<view class="image-area">
  <block wx:for="{{images}}" wx:key="index">
    <view class="up-img">
      <image class="uploader-img" src="{{item.url}}" mode="aspectFill"></image>
      <view class="del" data-index="{{index}}" bindtap="delThisImg">
        <image src="/images/del.png" class="del-image"></image>
      </view>
    </view>
  </block>

  <view class="upload-add" bindtap="uploadImage">
    <image class="uploader-img" src="../../images/upadd.png" mode="aspectFill"></image>
  </view>
</view>

image-uploader.js

let app = getApp()
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    images: {
      type: Array
    }
  },

  /**
   * 组件的初始数据
   */
  data: {

  },

  /**
   * 组件的方法列表
   */
  methods: {
    // 上传图片
    uploadImage: function () {
      let that = this

      wx.chooseImage({
        success(res) {
          const tempFilePaths = res.tempFilePaths
          tempFilePaths.forEach((element, index) => {
            that.uploadFile('jpg,gif,png', element, 'image')
          });

        }
      })
    },

    // 上传文件到服务器
    uploadFile: function (uploadExt, path, type) {
      let that = this
      wx.uploadFile({
        url: app.globalData.domain + 'base/upload/index?type=' + uploadExt,
        filePath: path,
        name: 'file',
        formData: {},
        success(res) {
          let ret = JSON.parse(res.data)
          // console.log(ret)
          if (type == 'image') {
            let images = that.data.images
            images.push(ret.data)
            that.setData({
              images: images
            })

            that.triggerEvent('myevent',images)
          }

        }
      })
    },

    // 删除上传的图片
    delThisImg: function (e) {
      let that = this
      let images = that.data.images

      images.splice(e.currentTarget.dataset.index, 1);
      that.setData({
        images: images
      })

      that.triggerEvent('myevent',images)
    },
  }
})

image-uploader.css

.image-area {
  width: 100%;
}
.image-area:after{
  content:"";  
  display: block;
  visibility: hidden;
  clear: both;
}
.up-img {
  position: relative;
  float: left;
  margin-right: 8px;
}

.uploader-img {
  width: 84px;
  height: 84px;
}

.del {
  position: absolute;
  right: 0;
  top: 0;
  background-color: rgba(0, 0, 0, 0.8);
  width: 20px;
  height: 20px;
}

.del-image {
  margin-top: 2px;
  margin-left: 2px;
  width: 16px;
  height: 16px;
}

.upload-add {
  float: left;
  margin-bottom: 8px;
  width: 84px;
  height: 84px;
  box-sizing: border-box;
  background-color: #EDEDEd;
  text-align: center;
  vertical-align: middle;
}

引入组件相关代码:

// xml文件
<image-uploader images="{{images}}" onmyevent="getImages"></image-uploader>

// js文件
  // 获取上传数据
  getImages: function (e) {
    this.setData({
      images: e.detail
    })
  }

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信小程序组件:多图上传 的相关文章

随机推荐

  • tcl加载tcom扩展包的一个实例

    函数名 readconfig 输入参数 无 返回参数 返回一个列表 proc readconfig package require tcom 创建com实例 set excel tcom ref createobj Excel Applic
  • 服务器启动显示message,DNS服务器中的message日志出现一些信息,看不懂,请大家帮我看看!!...

    DNS服务器中的message日志出现一些信息 看不懂 请大家帮我看看 2012 01 03 00 34 46 标签 服务器 信息 message 杂谈 DNS服务器中的message日志出现一些信息 看不懂 请大家帮我看看 主要是发现DN
  • flutter iOS 缺少通知权限,缺少位置权限

    App Store Connect 亲爱的开发者 我们发现了一个或多个问题与您的应用程序 hayya附近的朋友Chat Meet 1 0 3 1 最近的交付 您的交付是成功的 但您可能希望在您的下一次交付纠正以下问题 ITMS 90078
  • docker问题笔记--前端容器更新失败

    问题描述 情况是这样的 今天由于项目需要 更新了前端容器 但是重启之后发现还是旧的前端 一时间有点迷惑 我的更新方式是为了图省事 并没有用新的前端镜像去重新起一个容器 而是直接用dist文件夹内容替换前端容器中的frontend文件夹内容
  • 在vue项目中引入jssdk所遇到的各种问题

    由于在最近的项目中 需要用到扫一扫二维码签到的功能 在纯H5的页面中要实现这个是不太可能的 所以考虑用jssdk或者混合开发 由于没有微信公众号和混合开发的经验 混合开发不太现实 公司没有考虑这个 而jssdk有其他公众号平台的公司配合 所
  • 封装HashMap加入URLdecoder解码器,防注入

    其中URLDecoder decode有个好处 就是防止 sql注入 当然对其他字符无效了 当在input输入用户名时候 10001 经过后台先获取 并解码 会报错 package test import java io Unsupport
  • 51单片机矩阵键盘

    目录 前言 一 矩阵键盘扫描 二 LCD1602显示矩阵键盘键值 三 趣味小项目 密码锁 总结 前言 矩阵键盘的原理很浅显易懂 不涉及任何寄存器 就是纯线路连接 一 矩阵键盘扫描 矩阵键盘的内部接线图如下 不难看出其组成就是多个独立按键彼此
  • vue.js使用webpack发布,部署到服务器上之后如何在浏览器中查看到vue文件源码

    webpack vue 2 0打包发布之后 将发布的文件部署到服务器中之后 浏览器中访问的时候会出现一个webpack文件夹 里边会显示vue文件源码 如果想让vue源文件显示出来 可以在config index js 中 build 下的
  • 利用sqlmap进行post注入学习笔记

    了解sqlmap sqlmap是一款开源 功能强大的自动化SQL注入工具 支持Access MySQL Oracle SQL Server DB2等多种数据库 支持get post cookie注入 支持基于布尔的盲注 基于时间的盲注 错误
  • Mac上安装dlib的一堆坑

    Failed to build dlib ERROR Could not build wheels for dlib which is required to install pyproject toml based projects 主要
  • 指针笔试题(一)

    include
  • Tomcat启动报错Port 8080 required by Tomcat v9.0 Server at localhost is already in use. The server may al

    Port 8080 required by Tomcat v9 0 Server at localhost is already in use The server may already be running in another pro
  • VMware创建Linux虚拟机之(三)Hadoop安装与配置及搭建集群

    Hello world 本篇博客使用到的工具有 VMware16 Xftp7 若不熟悉操作命令 推荐使用带GUI页面的CentOS7虚拟机 我将使用带GUI页面的虚拟机演示 虚拟机 Virtual Machine 指通过软件模拟的具有完整硬
  • MyBatis 多对多 中间表插入数据

    在做这个员工管理系统demo的时候 由于user和role是多对多关系 且user主键是自增的 所有我们没办法提前知晓这个user id 所以插入的时候 就需要先插入user 然后再找到刚插入的id拿出来 再插入中间表user role 这
  • [913]MySQL查看数据库表容量大小

    查看一个数据中所有表的相关信息 1 可以在命令下使用show table status G命令查看 2 如果想知道MySQL数据库中每个表占用的空间 表记录的行数的话 可以打开MySQL的 information schema 数据库 在该
  • R语言实现的长转宽

    现在给大家介绍的数据处理技巧是长转宽 也就相当于Excel中的转置 不过用R语言实现的长转宽还有数据合并的功能 自然比Excel强大多了 这里给大家介绍4个函数 其中melt dcast 来自reshape2包 gather spread
  • stm32裸机开发下利用MultiTimer多任务时间片询

    stm32裸机开发下利用MultiTimer多任务时间片询 MultiTimerGithub地址 https github com 0x1abin MultiTimer 这是一个类似Arduino平台上的Ticker库 如需阅读懂源码 起码
  • 【Linux】管道

    管道命令 include
  • 云服务器1:云服务器能干什么

    云服务器1 云服务器能干什么 云服务器能干什么 服务器是啥 就是一个24小时不断电的电脑 有linux系统 windows2003 2013 你可以用他来挂qq 挂软件 挂一切你想挂的 除了游戏 因为他本身是用来为大家提供远程信息处理服务的
  • 微信小程序组件:多图上传

    由于在小程序开发过程中多次用到图片上传功能 在最近一次项目开发时 决定将其打包成组件来提高复用性 首先 在components文件夹下 新建Component 名称为 image uploader image uploader wxml