element-ui 使用:rules對表單字段進行驗證


最近有一個pc端后台的項目

用element-ui開發,有很多表單提交,所以這里寫一下 rules校驗

html中:

一定要注意 

prop,ref,model ,rules  這幾個屬性一定要添加,否則校驗不生效,以及對應的值 對應
      <!--     ref  表單被引用時的名稱,標識 this.$refs.shop.validate() 與這個對應-->
      <!--     model 表單數據對象 和data中shop對應-->
      <!--     rules 表單校驗規則,和data中保持一致 submitRules-->
      <el-form ref="shop" :model="shop" :rules="submitRules" label-width="120px">
 <!-- prop:表單域 model 字段,要和data中保持一致,在使用 validate、resetFields 方法的情況下,該屬性是必填的-->
        <el-form-item  prop="name" label="店鋪名稱">
          <el-input name="name" v-model="shop.name" />
        </el-form-item>
      </el-form>

js:

 export default {
    name: "Setin",
    data() {

      return {
        // 表單的對應數據
        shop: {
          name: '',
          codeid: '',
          id: '',
          code: '',
          phone: '',
          email: '',
          password: '',
          surepassword: ''
        },
        // 檢驗規則
        submitRules: {
          // 字段名添加校驗規則 以及觸發條件
          email: [
            {required: false, trigger: "blur" }
          ],
          // 除了必填其他的校驗
          phone: [
            {required: true, trigger: "blur", validator: vaildatePhone }
          ],
          name: [
            {required: true, trigger: "blur", message: "該項為必填項"}
          ],
          id: [
            {required: true, trigger: "blur", message: "該項為必填項"}
          ],
          code: [
            {required: true, trigger: "blur", message: "該項為必填項"}
          ],
          codeid: [
            {required: true, trigger: "blur", message: "該項為必填項"}
          ],
          surepassword: [
            {required: true, trigger: "blur", message: "該項為必填項"}
          ],
          password: [
            {required: true, trigger: "blur", message: "該項為必填項"}
          ]
        },
 
      }
    },
    methods: {
  
     
      },
      onSubmit() {
    
        // 校驗通過以后 掉接口 this.$refs.shop 和html中ref對應
        this.$refs.shop.validate(valid => {
          if (valid) {
           //成功回調
          } else {
          //失敗回調
          }
        });
      },
     
    }
  }

  

校驗規則

export function isEmail(val) {
  return /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/.test(val)
}

  

 完整代碼:

<template>
  <div>
    <div class="app-container">
      <!--     ref  表單被引用時的名稱,標識 this.$refs.shop.validate() 與這個對應-->
      <!--     model 表單數據對象 和data中shop對應-->
      <!--     rules 表單校驗規則,和data中保持一致 submitRules-->
      <el-form ref="shop" :model="shop" :rules="submitRules" label-width="120px">
 <!-- prop:表單域 model 字段,要和data中保持一致,在使用 validate、resetFields 方法的情況下,該屬性是必填的-->
        <el-form-item  prop="name" label="店鋪名稱">
          <el-input name="name" v-model="shop.name" />
        </el-form-item>
        <el-form-item prop="id"  label="店鋪賬號">
          <el-input name="id" v-model="shop.id" />
        </el-form-item>
        <el-form-item  prop="password" label="登錄密碼">
          <el-input name="password" type="password" v-model="shop.password" />
        </el-form-item>
        <el-form-item  prop="surepassword" label="確認密碼">
          <el-input name="surepassword" type="password" v-model="shop.surepassword" />
        </el-form-item>
        <el-tabs v-model="activeName" @tab-click="handleClick">
          <el-tab-pane label="手機號碼" name="phone">
            <el-form-item  prop="phone" label="手機號碼">
              <el-input name="phone" v-model="shop.phone" />
            </el-form-item>
          </el-tab-pane>
          <el-tab-pane label="郵箱" name="email">
            <el-form-item  prop="email" label="郵箱">
              <el-input name="email" v-model="shop.email" />
            </el-form-item>
          </el-tab-pane>
        </el-tabs>
        <el-form-item prop="code" label="圖片驗證碼">
          <el-row>
            <el-col :span="8">
              <el-input name="code" v-model="shop.code" />
            </el-col>
            <el-col :offset="1" :span="4" style="height:40px;"><img :src="imgUrl" @click="getVerifyCodeFun"/></el-col>
          </el-row>
        </el-form-item>
        <el-form-item  prop="codeid" label="驗證碼">
          <el-input name="codeid" v-model="shop.codeid"/>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="onSubmit">提交</el-button>
          <el-button @click="onCancel">取消</el-button>
        </el-form-item>
      </el-form>
    </div>
  </div>
</template>

<script>
  import { getVerifyCode,businessRegister } from "@/api/business";
  // 引入公用的校驗規則
  import { isPhone,isEmail } from "@/utils/validate";
  // 根據校驗規則,給與單獨的提示
  const vaildatePhone=(rule,value,callback)=>{
    if(!isPhone(value)){
      callback(new Error("請輸入正確的手機號"));
    }else{
      callback()
    }
  };
  const validateEmail = (rule, value, callback) => {
    if(!isEmail(value)){
      callback(new Error("請輸入正確的郵箱"));
    }else{
      callback()
    }
  };
  export default {
    name: "Setin",
    data() {

      return {
        // 表單的對應數據
        shop: {
          name: '',
          codeid: '',
          id: '',
          code: '',
          phone: '',
          email: '',
          password: '',
          surepassword: ''
        },
        // 檢驗規則
        submitRules: {
          // 字段名添加校驗規則 以及觸發條件
          email: [
            {required: false, trigger: "blur" }
          ],
          // 除了必填其他的校驗
          phone: [
            {required: true, trigger: "blur", validator: vaildatePhone }
          ],
          name: [
            {required: true, trigger: "blur", message: "該項為必填項"}
          ],
          id: [
            {required: true, trigger: "blur", message: "該項為必填項"}
          ],
          code: [
            {required: true, trigger: "blur", message: "該項為必填項"}
          ],
          codeid: [
            {required: true, trigger: "blur", message: "該項為必填項"}
          ],
          surepassword: [
            {required: true, trigger: "blur", message: "該項為必填項"}
          ],
          password: [
            {required: true, trigger: "blur", message: "該項為必填項"}
          ]
        },
        imgUrl: "",
        activeName: 'phone'
      }
    },
    methods: {
      handleClick(tab, event) {
        // 切換手機號 郵箱 驗證
        if(tab.name=='phone'){
          this.submitRules.email=[
            {required: false, trigger: "blur"}
          ];
            this.submitRules.phone=[
            {required: true, trigger: "blur", validator: vaildatePhone }
          ]
        }else{
          this.submitRules.email=[
            {required: true, trigger: "blur", validator:validateEmail}
          ];
          this.submitRules.phone=[
            {required: false, trigger: "blur"}
          ]
        }
      },
      getVerifyCodeFun() {
        getVerifyCode().then(data => {
          // 傳輸文件流 ajax 必須有 responseType: 'arraybuffer' ,然后對數據進行前端拼接
          let imgUrl =
            "data:image/png;base64," +
            btoa(
              new Uint8Array(data).reduce(
                (data, byte) => data + String.fromCharCode(byte),
                ""
              )
            );
          // 這里如果不清楚 new Uint8Array(data.data) 中data的指代,就看看最上面的那個圖
          this.imgUrl = imgUrl;
        });
      },
      onSubmit() {
        console.log(this.submitRules)
        // 校驗通過以后 掉接口 this.$refs.shop 和html中ref對應
        this.$refs.shop.validate(valid => {
          if (valid) {
            businessRegister({
              storeName:this.shop.name,
              username:this.shop.id,
              password:this.shop.password,
              contact:this.shop.phone ? this.shop.phone : this.shop.email
            }).then( data=>{
              this.$message('成功')
            })


          } else {
            console.log("error submit!!");

            this.$message({
              message: '錯誤!',
              type: 'error'
            })
            return false;
          }
        });
      },
      onCancel() {

        this.$message({
          message: '取消!',
          type: 'warning'
        })
        this.shop={
          name: '',
            codeid: '',
            id: '',
            code: '',
            phone: '',
            email: '',
            password: '',
            surepassword: ''
        }
      }
    },
    mounted() {
     this.getVerifyCodeFun();
    }
  }
</script>

<style scoped>

</style>

  

有一個博客 就這個問題寫的比較詳細 放在這里方便以后查看 https://blog.csdn.net/qq_41402200/article/details/86016313


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM