vue项目中封装手动上传单个图片并支持修改和移除

2023-11-16

现有的组件库无法满足手动上传文件到服务器,并支持通过按钮修改和移除文件的操作。所以我利用原生input进行封装,如有需要请拿走

1.页面部分

        <div class="upload-picture">
            <div class="uploadItem" v-if="imageUrl">
                <input type="file" v-if="clearInputShow" hidden ref="uploadfile" @change="onChangeFile" />
                <img class="avatar" :src="imageUrl" alt="" srcset="" @click="selectPicture()" />
                <div>
                    <el-button class="button1" type="default" size="mini" @click="selectPicture()">修改</el-button>
                    <el-button class="button1" type="default" size="mini" @click="remove()">移除</el-button>
                </div>
            </div>
            <div class="uploadItem" v-else>
                <input v-if="clearInputShow" type="file" hidden ref="uploadfile" @change="onChangeFile" />
                <i class="el-icon-plus avatar-uploader-icon" @click="selectPicture"></i>
                <el-button class="button" type="default" size="mini" @click="selectPicture">选择图片</el-button>
            </div>
        </div>

2.逻辑部分

export default {
    props: {
        imageUrl: {
            type: String,
            default: ""
        },
    },
    data() {
        return {
            clearInputShow: true
        }
    },
    methods: {
        // 上传
        selectPicture() {
            this.$refs.uploadfile.click();
        },
        // 移除文件
        remove() {
            this.$emit("update:imageUrl", '')
        },

        // 手动上传文件
        onChangeFile() {
            // file上传的文件
            let file = this.$refs.uploadfile.files[0];
            const formData = new FormData()
            // 上传文件的参数都以这种方法
            formData.append('file', file)
            formaData.append('fileName', file.name)
            this.clearInputShow=false
            // 上传接口
            this.$axios.post('接口地址', formData).then(res => {
                this.clearInputShow=true
                // 假设res.data.picUrl是接口返回图片路径
                this.$emit("update:imageList", res.data.picUrl)
            }).catch(error=>{
                 this.clearInputShow=true
            })
        },
    }
}

3.样式部分

<style lang="less" scoped>

.uploadItem {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    width: 178px;
}

.avatar-uploader-icon {
    font-size: 28px;
    color: #8c939d;
    width: 178px;
    height: 178px;
    line-height: 178px;
    text-align: center;
    border: 1px dashed #d9d9d9;
}

.button {
    width: 80px;
    margin-top: 10px;
}

.button1 {
    width: 60px;
    margin-top: 10px;
}

.avatar {
    width: 178px;
    height: 178px;
    display: block;
    border: 1px dashed #d9d9d9;
}
</style>

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

vue项目中封装手动上传单个图片并支持修改和移除 的相关文章

  • 在 config() 模块中注入依赖项 - AngularJS

    目前在 app js 中我有以下路线 var gm angular module gm gm services gm directives gm filters gm controllers ngSanitize gm config rou
  • Socket.io 如何判断某人何时离开

    我正在使用 socket io 创建一个实时游戏 目前 当有人离开时 什么也不会发生 我想以某种方式通知服务器说谁离开了 有没有办法在用户离开时发出正确的信息 我可以让服务器每 1000 毫秒对每个人执行一次 ping 操作 或者通过其他方
  • Nuxt 3动态组件中根据路由参数进行API调用

    我正在尝试创建一个简单的 Nuxt 3 应用程序用于学习目的 它使用动态路线 https v3 nuxtjs org docs directory structure pages dynamic routes加载页面时从 API 加载数据
  • 在 JSON 数组中按属性查找对象

    我在获取 JSON 数据中的字符串时遇到问题 格式如下 name Alice age 20 id David last 25 id John last 30 有时它会一起改变位置 John从第三名到第二名 name Alice age 20
  • 将表单传递给 AngularJS 组件进行验证

    我正在将旧代码库迁移到 AngularJS 1 5 所推广的新组件架构 我在对较大的表单执行此操作时遇到了问题 传统上 我会附加表单验证 如下所示
  • 如何使用 javascript/ASP.NET/CSS 旋转和淡入淡出背景图像

    我需要随机淡入淡出背景图像 这将是一个定时函数 例如每 5 秒一次 我需要使用 ASP NET Javascript CSS 或全部三者来完成此操作 请大家帮帮我 谢谢 Cycle 一个 jQuery 插件 是一个非常灵活的图像旋转解决方案
  • 用于自由形式绘图的 javascript 库

    是否有一个 JavaScript 库可以让我在网页上绘图 然后保存该绘图的状态 我想使用鼠标绘制 2D 图像 然后如何存储和加载该绘图 使用 HTML5 画布 绘制图像的简单示例如下 http jsfiddle net ghostoy wT
  • 将 MVC 操作结果发送到打印机

    我有一个带有操作的控制器 SomeController ActionToBePrinted ActionToBePrinted 返回一个 html 视图 当按下按钮时 从普通的 mvc razor 视图调用此操作 当按下按钮时 我将如何将视
  • 检测 JavaScript 版本

    如何检测浏览器支持的 JavaScript 版本 如果有 我想检查 ECMAScript 3 ECMAScript 5 和 ECMAScript 6 注意 我想避免已弃用的language tag 这里有一个很好的参考给你 http www
  • Android键盘点击搜索输入时出现和消失

    我在用谷歌地图 Js API当我搜索一个地方时 我的输入搜索栏工作正常 当我通过 iPhone 设备使用它时 它也工作得很好 但是当我通过Android 设备然后键盘立即出现和消失 我已经找到了一些关于当我按下搜索栏时 android 键盘
  • 如何为多个元素添加Class?

    我正在使用这段 javascript 向多个元素添加一个类 我试图引用多个 div 并向它们添加类 它只适用于第一个 JavaScript
  • 节省页面加载时间的提示[重复]

    这个问题在这里已经有答案了 我的问题 削减那些不必要的 kb 并使页面加载速度更快的最佳方法是什么 全部是什么优化实践 编码实践 在js php中 如果执行可以使您的页面更轻 为什么我问这个 我读了这篇关于 jquery js 与 jque
  • Immutable.js 推入嵌套对象中的数组

    假设有一个对象 const object foo bar 1 2 3 我需要推动4 to object foo bar array 现在我正在这样做 const initialState Immutable fromJS object co
  • 如何在 Vue.js 2 中使用事件总线通过自定义事件传递数据

    我在用着Vue js 2 5 x 在我的玩具项目中 我实现了一个事件总线 类似于所示的here https alligator io vuejs global event bus 事件总线在 Vue 原型中全局注册为 eventBus 然后
  • Ajax调用完成后执行函数

    我是 Ajax 新手 我尝试在使用 for 循环时使用 Ajax Ajax 调用之后 我正在运行一个使用 Ajax 调用中创建的变量的函数 该函数只执行两次 我认为 Ajax 调用可能没有足够的时间在循环开始之前进行调用 有没有办法在运行
  • 添加元数据到快速路线

    有什么方法可以将元数据添加到 Express 的路线中吗 例如 app get some route function req res some meta data 我正在寻找一种针对我的节点应用程序的 AOP 方法 因此我想通过身份验证和
  • 来自 ajax 的 Bootstrap 表 json

    我有 ajax 和 bootstrap 表的问题 我有一个 ajax JSON 我用这个方法调用 document ready function ajax url php process php method fetchdata dataT
  • 为什么转换 new.Date() .toISOString() 会改变时间?

    我正在以两种不同的格式在数据库中插入日期 这是作为日期时间插入 var mydate mydate new Date document getElementById clockinhour value mydate toISOString
  • 带有 'as' 属性的通用 React TypeScript 组件(能够渲染任何有效的 dom 节点)

    我在下面的示例中按预期工作 我的问题是 无论如何我可以重写它 这样我就不必传递通用的T和as支柱 理想情况下我想通过asprop 并让组件的 prop 接口使用它 这在 TypeScript 中可能吗 export type Props l
  • Page_ClientValidate 正在验证多次。

    我的问题是 验证摘要消息 警报 显示两次 我无法弄清楚原因 请帮忙 这是代码 function validate javascript function if typeof Page ClientValidate function var

随机推荐

  • 操作系统 虚拟存储器的概念

    虚拟存储器 程序装入内存时可能会出现如下问题 程序太大 要求的空间超出了内存总容量 有大量作业要求运行 但内存不能容下所有作业 常规存储器管理方式的特征 一次性 要求作业全部装入内存才能运行 驻留性 许多不用或暂时不用的程序占用了大量内存空
  • linux命令strings

    linux命令strings 其man信息如下 strings 1 GNU Development Tools strings 1 NAME strings 显示文件中的可打印字符 总览 SYNOPSIS strings a all f p
  • 二维线段树【模板——给出对应注释】

    闲话少说 直接看注释反而会更容易读懂这段二维线段树的模板 include
  • elasticsearch启动报错:master not discovered yet

    通过命令启动 bin elasticsearch E node name hotnode E cluster name geektime E path data hot data E node attr my node type hot 报
  • 违反 GPL 协议赔偿 50 万,国内首例!

    整理 祝涛 出品 CSDN ID CSDNnews 近日 一起关于GPL版权纠纷案裁判文书公示 在一审中 法院指出GPL 3 0协议是一种民事法律行为 具有合同性质 可认定为授权人与用户间订立的著作权协议 属于我国 合同法 调整的范围 来源
  • C++ Primer阅读笔记--数组的使用

    1 理解复杂的数组声明 阅读复杂数组声明时 建议由内向外阅读 int ptrs 10 ptrs是一个含有10个整型指针的数组 int refs 10 错误 不存在引用的数组 int Parray 10 arr Parray指向一个含有10个
  • Qt之TCP心跳包

    Qt之TCP心跳包 当Qt作为客户端程序 而服务器需要监控客户端的在线状态时 就需要Qt端发送心跳包 心跳包可以是TCP也可以是UDP 这里介绍TCP心跳包的实现方法 心跳包通常要单开一个线程 在进程运行的过程中一直执行 代码示例 h文件
  • element-ui —Cascader 级联选择器(选中方式处理)

    目前Vue Element的 el cascader 级联选择器 多选或者选择任意一级 需要点击左侧的checkbox才能选中 目标 点击label选中 已选中状态再次点击label取消选中 有两种方式实现 通过添加点击事件 通过css样式
  • 企业微信第三方应用Demo源码

    第三方应用Demo源码 qywx third java qywx third java企业微信开发指南https github com liyuexi qywx guide企业微信开发第三方应用开发视频 https mp weixin qq
  • vue实现滚动监听,锚点定位,导航高亮

  • matlab双立方插值法_双三次插值(bicubic interpolation)原理及MATLAB源码实现

    双三次插值具体实现 clc clear fff imread E Documents BUPT DIP 图片 lena bmp ff rgb2gray fff 转化为灰度图像 mm nn size ff 将图像隔行隔列抽取元素 得到缩小的图
  • pikachu靶场记录之暴力破解-包括带token的密码猜解

    说明 pikachu是一个免费的php靶场 类似于dvwa 从github下载对应的项目 解压缩并放到phpstudy的www目录下即可 在phpstudy软件中开启apache mysql 访问首页 192 168 10 150 pika
  • Gitee在大数据中心的使用

    在本地主机或者可以VSCode直接连接可视化的服务器上 1 首先在gitee新建一个带有develop分支的仓库 2 在自己的主机 e g server 1 3 上git clone下来 例如 git clone git gitee com
  • Flutter ListView详解

    ListView详解 ListView常用构造 ListView ListView 默认构建 效果 ListView ListTile ListTile 属性 ListTile 使用 效果 ListView builder builder属
  • C# combobox绑定数据源(datasource)

    1 绑定数据源 1 1数据源为dataTable DataTable dt new DataTable 显示的数据 ComBox1 DisplayMemeber name name为DataTable的字段名 隐藏的数据 对于多个数据 可以
  • 左连接(LEFT JOIN)无法返回主表所有行的解决方法

    需求 在业务员管理客户页面 需要展示所有客户信息 并且按客户的最近下单次数进行排序 第一次写的代码如下
  • Vue 2 升级Vue3 ,并且使用vsCode 搭建Vue3 开发环境

    Vue 2 升级Vue 3 版本详细步骤 第一 使用快捷键win R 打开cmd 命令窗口 第二 查看当前电脑运行的vue 版本 请使用如下指令 vue V vue Version 卸载目前vue版本 输入如下指令 npm uninstal
  • JAVA常用的七种设计模式

    学习设计模式之前 我们先要了解一下设计模式的怎么来的 对于设计人员 特别是开发人员吗 往往受限于眼界或经验不能够体会到设计原则的实用性 或者在处理具体问题时 不知道如何把设计原则应用到到设计和代码 因此产生了 模式 随着参与的项目越来越多
  • 数据结构练习题-算法设计题-线性表

    算法设计题 1 将两个递增的有序链表合并为一个递增的有序链表 要求结果链表仍使用原来两个链表的存储空间 不另外占用其它的存储空间 表中不允许有重复的数据 题目分析 合并后的新表使用头指针Lc指向 pa和pb分别是链表La和Lb的工作指针 初
  • vue项目中封装手动上传单个图片并支持修改和移除

    现有的组件库无法满足手动上传文件到服务器 并支持通过按钮修改和移除文件的操作 所以我利用原生input进行封装 如有需要请拿走 1 页面部分 div class upload picture div class uploadItem div