el-upload 的两种使用方式

1            <el-upload 
          show-file-list="false" 
          list-type="picture"
          class="upload-demo" 
          :action="upload" 
          :on-preview="handlePreview" 
          :on-remove="handleRemove" 
          :file-list="fileList" 
          :on-success="(response, file, fileList) => handleAvatarSuccess('head', response, file, fileList)" 
          :limit="1">
            <el-button size="small" type="primary">点击上传</el-button>
            <div slot="tip" class="el-upload__tip"></div>
          </el-upload>

on-success 传更多的值, :on-success="(response, file, fileList) => handleAvatarSuccess('head', response, file, fileList)" 

response, file, fileList 是原本的参数

    handleAvatarSuccess(field, response, file, fileList) { 
      console.log(response)
      console.log('field=' + field)
      var url = this.img_url_head + response.v
      this.$forceUpdate()
      this.$set(this.obj, field, url)
    },

2   before-upload中自己上传

      <el-upload 
        class="avatar-uploader" 
        action="http://localhost:1990/upload" 
        :show-file-list="false" 
        :on-success="handleAvatarSuccess" 
        :before-upload="beforeAvatarUpload">
          <img v-if="imageUrl" :src="imageUrl" class="avatar">
          <i v-else class="el-icon-plus avatar-uploader-icon"></i>
        </el-upload>

 

beforeAvatarUpload(file) { 

     let param = new FormData(); //创建form对象

      param.append('file', file, file.name); //通过append向form对象添加数据
      //param.append('chunk', '0'); //添加form表单中其他数据 
      let config = {
        headers: { 'Content-Type': 'multipart/form-data' }
      }; //添加请求头

      var that = this
      console.log(this.upload)
      this.$axios.post(this.upload, param, config)
        .then(response => {
          console.log(response.data)
         // var url = that.img_url_head + response.data.v
         // that.imageUrl = url 
        })
      return false
    },

 

------------------------------

美化上传按钮的样式:https://blog.youkuaiyun.com/chendeyou5/article/details/80168504


 
 
    .ui-upload {
      height: 30px;
      width: 80px;
      background-color: #00abff;
      font-size: 14px;
      line-height: 30px;
      cursor: pointer;
      display: inline-block;
      text-align: center;
      color: #fff;
      border-radius: 3px;
      margin-left: 20px;
    }
   

 <label class="ui-upload">upload<input type="file" style="display: none;" /></label>

样式居然会被覆盖,这是为何???????

 

<label style="display: inline-block;height: 30px; width: 80px;  background-color: #00abff; font-size: 14px; line-height: 30px; cursor: pointer; text-align: center; color: #fff; border-radius: 3px; margin-left: 20px;">upload<input type="file" style="display: none;"  @change="update($event,'head')" /></label> 

这样总可以

//-------图片-------

    update: function(e, point_name) {
      let file = e.target.files[0];
      let param = new FormData();            //创建form对象
      param.append('file', file, file.name); //通过append向form对象添加数据
      //param.append('other', '0');          //添加其他数据 
      let config = {
        headers: { 'Content-Type': 'multipart/form-data' }
      }; //添加请求头

      var that = this
      console.log(this.upload)
      this.$axios.post(this.upload, param, config)
        .then(response => {
          console.log(response.data)
          that.upload_success(response.data, point_name)
        })
    },
    // 图片上传成功
    upload_success(data, point_name) {
      if (data.s == "0") {  
        var url =this.img_url_head + data.v  
        //如果该字段,之前的obj中没有,则需要使用 $set 更新,视图才能刷新
        this.$set(this.obj, point_name, url)
        console.log(this.obj.image)
      }
    },

### 调整 Element UI 中 `el-upload` 组件文本显示区域与整体样式的布局 为了交换 `el-upload` 组件中的 `.el-upload__text` 和 `.el-upload--text` 的位置,可以通过自定义 CSS 或者修改模板结构来实现。以下是两种不同的解决方案: #### 方法一:通过自定义CSS调整顺序 如果仅需视觉上改变两者的位置而不改动HTML结构,可以利用绝对定位或Flexbox布局属性。 ```css /* 使用 Flex 布局 */ .el-upload { display: flex; flex-direction: column-reverse; /* 反转子元素排列方向 */ } /* 如果有其他样式需求可继续补充 */ ``` 这种方法简单快捷,适用于不需要大幅度更改原有DOM树的情况[^1]。 #### 方法二:重写模板结构调整层次关系 对于更复杂的场景,可能需要直接操作Vue组件内部的slot插槽来自定义内容展示方式。这通常涉及到创建一个新的包裹容器,并在此基础上构建所需的UI逻辑。 ```html <template> <div class="custom-upload"> <!-- 自定义文本 --> <span slot="tip" class="el-upload__tip">将文件拖到此处...</span> <!-- 文件列表和其他交互控件保持默认行为 --> <el-upload :action="uploadUrl" ... > <!-- 默认插槽用于放置触发按钮或其他提示信息 --> <i class="el-icon-plus"></i> </el-upload> </div> </template> <style scoped lang="scss"> .custom-upload{ .el-upload__tip{/* 样式定制 */} } </style> ``` 此方案提供了更大的灵活性,允许开发者完全掌控上传区内的各个部分是如何组合在一起的[^2]。 需要注意的是,在实际开发过程中应当充分考虑用户体验以及业务逻辑的一致性,确保任何界面变化都不会影响功能正常使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值