最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

el-form實(shí)現(xiàn)表單和圖片手動(dòng)上傳和校驗(yàn)功能

 更新時(shí)間:2024年01月31日 16:43:02   作者:說好不emo  
在寫項(xiàng)目時(shí),難免遇到需要上傳表單,圖片等文件,且表單內(nèi)容需進(jìn)行驗(yàn)證及必填項(xiàng)提示,圖片需要和信息一起傳遞且圖片載入后需可預(yù)覽,這篇文章給大家介紹el-form實(shí)現(xiàn)表單和圖片手動(dòng)上傳和校驗(yàn)功能,感興趣的朋友一起看看吧

在寫項(xiàng)目時(shí),難免遇到需要上傳表單,圖片等文件。且表單內(nèi)容需進(jìn)行驗(yàn)證及必填項(xiàng)提示,圖片需要和信息一起傳遞且圖片載入后需可預(yù)覽。

這里舉一個(gè)例子:

表單數(shù)據(jù)

從上面的圖可以看出注冊(cè)環(huán)節(jié)分為了兩部分?jǐn)?shù)據(jù),左邊是注冊(cè)時(shí)需求提交的表單信息,右邊是需求上傳的圖片。先來解決左邊的表單數(shù)據(jù),el-form是ElementUI封裝的表單組件,可以收集、校驗(yàn)和提交數(shù)據(jù)。el-form中的model用來綁定表單數(shù)據(jù)對(duì)象,el-form-item中的prop為model對(duì)象中傳遞的字段,el-input中的v-model綁定的是該字段對(duì)應(yīng)的屬性值。

<el-form :model='loginForm'
          autocomplete='on'
         :rules='rules'
          class='login-form'>
     <el-form-item prop='username' label='用戶名'>
          <el-input placeholder='請(qǐng)輸入用戶名'
                    name='username'
                    type='text'
                    v-model='loginForm.username'
                    autocomplete='on'/>
      <el-form-item>
</el-form>

el-upload組件

input的name屬性是用來定義input元素的名稱,只有設(shè)置了 name 屬性的表單元素才能在提交表單時(shí)傳遞它們的值。input的value屬性的type屬性來決定,type屬性屬性可以是button、reset、submit、text、password、hidden、checkbox、radio、image、file等。el-upload組件就是封裝的type屬性為file的input,并提供了before-upload、on-progress、on-success、on-error、on-preview、on-remove等鉤子函數(shù)來獲取上傳過程中的屬性狀態(tài)等信息。

表單驗(yàn)證

ElementUI提供了表單驗(yàn)證的規(guī)則,可以通過rules屬性來定義對(duì)應(yīng)el-form-item中的驗(yàn)證規(guī)則(支持多個(gè)規(guī)則驗(yàn)證)。當(dāng)然如果覺得ElementUI提供的表單驗(yàn)證功能無法滿足項(xiàng)目需求我們也可以自定義驗(yàn)證規(guī)則。通過validator屬性調(diào)用自定義的校驗(yàn)方法,自定義校驗(yàn)callback必須被調(diào)用。自定義校驗(yàn)規(guī)則可以參考文章自定義表單校驗(yàn)規(guī)則及常用表單校驗(yàn),我將一些常用的校驗(yàn)都寫在了一起方便后續(xù)直接使用。

文件上傳HTML構(gòu)建

ElementUI提供了一個(gè)封裝好的的上傳組件el-upload,封裝了文件上傳的一系列鉤子函數(shù),可以監(jiān)聽文件上傳過程中的所有事件。el-upload連請(qǐng)求也封裝了,只要通過action提供請(qǐng)求路徑(后端文件的上傳地址)就可以將文件直接上傳到服務(wù)器。

文件上傳樣式設(shè)計(jì)

根據(jù)自己的需求設(shè)計(jì)一個(gè)文件樣式,這里我用虛擬邊框來顯示文件上傳區(qū)域。中間放個(gè)圖標(biāo)來觸發(fā)input選框,圖片文件上傳后就可以直接在當(dāng)前區(qū)域進(jìn)行預(yù)覽。

阻止自動(dòng)上傳并獲取文件

在el-upload中定義屬性:auto-upload=“false” 可以禁止文件自動(dòng)上傳,既然禁止了自動(dòng)上傳那么我們就需要拿到文件對(duì)象。通過upload組件的on-change屬性我們可以監(jiān)聽文件添加、上傳時(shí)的狀態(tài)改變,利用該屬性觸發(fā)自定義事件可以獲取到需要的文件屬性。利用window.createObjectURL(e.raw)創(chuàng)建圖片地址實(shí)現(xiàn)本地預(yù)覽,如果fileList長(zhǎng)度大于0說明已經(jīng)上傳了圖片這時(shí)我們就通過clearValidate去掉校驗(yàn)提示。

表單和圖片上傳

有文件的form表單上傳數(shù)據(jù)要用formData類型,我們需要?jiǎng)?chuàng)建一個(gè) FormData 對(duì)象來接收文件數(shù)據(jù)。選擇了圖片并填寫必填信息之后點(diǎn)擊【注冊(cè)】按鈕發(fā)起注冊(cè)請(qǐng)求,在register 方法里把表單信息通過append將數(shù)據(jù)添加到formData中。然后利用axios向后臺(tái)發(fā)起注冊(cè)請(qǐng)求并發(fā)送注冊(cè)信息,res為返回的請(qǐng)求結(jié)果。

總結(jié):

這里主要是多了圖片的手動(dòng)上傳,el-upload組件默認(rèn)會(huì)自動(dòng)上傳提交的文件。這里要求圖片不允許自動(dòng)上傳,需要和信息一起在提交的時(shí)候進(jìn)行傳遞。

附上源碼供參考:

<el-form :model="loginForm"
          autocomplete="on"
          :rules="rules"
          class="login-form">
  <div>
    <el-form-item prop="username" label="用戶名">
      <el-input placeholder="請(qǐng)輸入用戶名"
                name="username"
                type="text"
                v-model="loginForm.username"
                autocomplete="on" />
    </el-form-item>
		<el-form-item prop="file"
              label="營業(yè)執(zhí)照">
  		<el-upload class="fileupload"
              ref="upload"
              action="http://www.fiitool.com/upload"
              ::limit="1"
              :show-file-list="false"
              :on-change="PicturePreview"
              :auto-upload="false"
              accept="image/png,image/gif,image/jpg,image/jpeg">
    <i class="el-icon-upload avatar-uploader-icon"></i>
    <div v-show="!dialogImageUrl"
          slot="tip"
          class="el-upload__text upload__tip">上傳照片</div>
 	 </el-upload>
	</el-form-item>
</el-form>
rules: {
  username: [
    { required: true, message: '請(qǐng)輸入用戶名', trigger: 'blur' },
    { validator: check.Username, trigger: 'blur' }
  ],
  password: [
    { required: true, message: '請(qǐng)輸入密碼', trigger: 'blur' },
    { validator: check.SimplePwd, trigger: 'blur' }
  ],
  company: [
    { required: true, message: '請(qǐng)輸入公司名稱', trigger: 'blur' },
    { validator: check.Company, trigger: 'blur' }
  ],
  phone: [
    { required: true, message: '請(qǐng)輸入手機(jī)號(hào)', trigger: 'blur' },
    { validator: check.Phone, trigger: 'blur' }
  ],
  email: [
    { required: true, message: '請(qǐng)輸入郵箱', trigger: 'blur' },
    { validator: check.Email, trigger: 'blur' }
  ],
  file: [
    { required: true, message: '請(qǐng)上傳營業(yè)執(zhí)照' }
  ]
}
PicturePreview (file, fileList) {
  var URL = null
  if (window.createObjectURL !== undefined) {
    URL = window.createObjectURL(file.raw) // basic
  } else if (window.URL !== undefined) {
    URL = window.URL.createObjectURL(file.raw) // IE,google,360,Safari,firefox
  } else if (window.webkitURL !== undefined) {
    URL = window.webkitURL.createObjectURL(file.raw) // webkit
  }
  this.ImageUrl = URL
  this.registerForm.license = file.raw
  if (fileList.length > 0) {
    this.$refs['fileupload'].clearValidate() // 去掉file驗(yàn)證
  }
},
//CSS樣式
.files {
  .el-form-item {
    width: 100%;
    height: 100%;
    text-align: center;
    /deep/ {
      .el-form-item__content {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        line-height: normal;
        padding: 5px;
        .fileupload {
          width: 100%;
          height: 100%;
          .uploader-icon {
            font-size: 40px;
            &:hover {
              color: royalblue;
            }
          }
        }
      }
    }
  }
}
 

到此這篇關(guān)于el-form實(shí)現(xiàn)表單和圖片手動(dòng)上傳和校驗(yàn)的文章就介紹到這了,更多相關(guān)el-form表單和圖片上傳內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

麦盖提县| 海伦市| 丹江口市| 长子县| 洞口县| 吉木萨尔县| 旺苍县| 彝良县| 尤溪县| 襄城县| 洪湖市| 桓仁| 乐陵市| 夹江县| 南川市| 古蔺县| 易门县| 通州区| 康乐县| 扶绥县| 澎湖县| 毕节市| 浪卡子县| 肃宁县| 永靖县| 武穴市| 桂林市| 甘洛县| 汝城县| 漳州市| 南投县| 新邵县| 新疆| 墨玉县| 遂平县| 时尚| 英德市| 新宁县| 伊通| 湘潭县| 英吉沙县|