关于el-form组件有时候不能输入问题和el-upload到达上传限制后按钮禁用

本文介绍了在Vue项目中遇到的el-form组件输入异常及el-upload上传限制后仍能打开文件选择弹窗的问题。针对el-form组件无法输入的情况,原因是数据绑定(model)与ref重名,解决方案是确保两者命名不一致。而对于el-upload,当文件达到上传限制后,通过监听fileList长度改变,动态修改上传按钮的slot,从而实现禁用并阻止弹窗出现。通过这种方式,实现了上传功能的完善控制。

目录

el-form组件有时候不能输入问题

问题描述以及解决思路

方案截图

​编辑

el-upload到达上传限制后按钮禁用

问题描述以及解决思路

部分代码

效果展示


el-form组件有时候不能输入问题

问题描述以及解决思路

在测试界面功能的时候,进行输入或者下拉选择等,会无法输入(选中),但是进行刷新之后再次进行该操作就可以了正常显示了,很奇怪,翻了翻官方文档好像也没有遗漏,毕竟el-form就是我复制粘贴过来的

然后就去问度娘了,然后原因在于 数据绑定(model)和 ref 的两者重名了,然后系统就找不对了,所以需要将两者其中一个改名字就好了   T-T

虽然我后来去翻了一下我原来写的,两者命名一样,但是也不影响输入或者选择

反正如果遇到之类情况,可以先让ref 和 model 绑定不同值

方案截图

el-upload到达上传限制后按钮禁用

问题描述以及解决思路

本来限制了文件只能上传一个,那么我就想着禁用了按钮,让他无法再次上传,但是禁用了按钮以后,发现打开文件夹的弹窗仍然能够出现,这不是我想要的结果,然后,我就去找万能的度娘了

网上有很多做法,但我试了发现没啥用,就还是会出现弹窗,要不然就是连删除操作都被禁用了,而删除操作是不能禁用掉的,因为功能是:在已上传的基础上修改的话,要先把原来的删了,再上传新的,只要有一张上传的,就不给再次上传

所以我就再次探索,找到了解决方案

就是对上传(选取)文件按钮的slot 进行修改!!

根据文档,slot = trigger 和 slot = tip 两者是完全不同的,terigger是出发弹窗的,而tip是提示文字而已,所以我们可以通过监听文件是否已经达到限制数量,如果是就将slot = trigger 改为 slot = tip ,并且按钮禁用,就可以达到效果

部分代码

《HTML》

<el-upload
                  class="upload-demo"
                  :action="getUploadUrl()"
                  :on-remove="handleRemove"
                  :before-upload="beforeAvatarUpload"
                  :on-success="handleSuccess"
                  :on-exceed="handleExceed"
                  :headers="headers" accept="image/*"
                  ref="upload" list-type="picture"
                  :limit="1"
                  :file-list="fileList"
                  :data="uploadData"
                >
                  <el-button
                    size="small"
                    round
                    icon="el-icon-upload2"
                    type="primary"
                    :slot="showSubmitPic ? 'trigger' : 'tip'"
                    :disabled='!showSubmitPic'
                    >点击上传
                  </el-button>
                  <div slot="tip" class="el-upload__tip" style="color: red">
                    只能上传一张图片文件,若要修改请先删除原图,请注意图片不超过1MB
                  </div>
                </el-upload>

《js》

// 在data中的变量声明就不写了
  watch: {
    fileList (val) {
      if (val.length === 0) {
        this.showSubmitPic = true
      } else {
        this.showSubmitPic = false
      }
    }
  },

效果展示

 

 禁用后再怎么点击按钮都无法打开弹窗了,并且可以删除原文件

 

### 如何使用 Element-UI 的 `el-upload` 组件实现文件上传与下载功能 #### 文件上传部分 通过配置 `<el-upload>` 组件的相关属性可以完成文件上传功能。以下是具体实现方式: 1. **基本结构** 配置 `accept` 属性指定允许上传的文件类型,设置 `drag` 属性启用拖拽模式,定义 `action` 属性指向服务器接口地址[^1]。 2. **自定义上传逻辑** 如果需要手动控制文件上传行为,则可以通过绑定 `:auto-upload="false"` 来禁用自动上传,并利用 `:http-request="customUploadFunction"` 自定义上传请求方法[^3]。 下面是一个完整的 Vue 方法示例: ```javascript methods: { upAndDownload(param) { // 定义 http-request 替代默认上传行为 const formData = new FormData(); formData.append('file', param.file); this.$axios.post('/upload-endpoint', formData, { headers: {'Content-Type': 'multipart/form-data'} }).then(response => { console.log('File uploaded successfully:', response.data); }).catch(error => { console.error('Error during file upload:', error); }); }, beforeUpload(file) { // 在上传前验证文件大小或其他条件 const isLt1M = file.size / 1024 / 1024 < 1; if (!isLt1M) { this.$message.error('The file size should not exceed 1MB!'); } return isLt1M; }, handleExceed() { // 当超出最大数量限制时触发 this.$message.warning('Only one file can be uploaded at a time.'); }, clearFiles() { // 手动清除已选文件列表 this.$refs.upload.clearFiles(); } } ``` 3. **模板代码** ```html <el-upload ref="upload" accept=".xls,.xlsx" drag action="#" :limit="1" :auto-upload="false" <!-- 关闭自动上传 --> :http-request="upAndDownload" <!-- 调用自定义上传函数 --> :before-upload="beforeUpload" :on-exceed="handleExceed"> <i class="el-icon-upload"></i> <div class="el-upload__text">将文件拖到此处,或点击<em>上传</em></div> <div class="el-upload__tip" slot="tip">* 请上传少于1000行的Excel文件</div> </el-upload> <!-- 添加一个按钮用于提交文件 --> <el-button @click="submitForm()">Submit</el-button> ``` 当用户选择好文件后,调用 `this.$refs.upload.submit()` 提交表单即可启动上传流程。 --- #### 文件下载部分 对于文件下载功能,通常由服务端提供一个可供访问的 URL 或者直接响应二进制流给前端浏览器处理。下面是如何集成这一功能至页面上的说明: 假设有一个名为 `/download-file/:id` 的 API 接口负责分发目标资源链接或者实际文档内容本身。那么可以在界面上增加如下按钮供用户操作: ```html <el-button type="primary" icon="el-icon-download" @click="triggerDownload">Download File</el-button> ``` 对应的 JavaScript 函数可能像这样写成: ```javascript methods: { triggerDownload() { window.location.href = '/api/download-file/your_file_id'; // 直接跳转到下载路径 } }
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值