成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

解析vue表單驗(yàn)證rules及validator驗(yàn)證器的使用方法

3403771864 / 2347人閱讀

  很多知識(shí)都是需要提早知道,才可以規(guī)避很多錯(cuò)誤。

  Element中Form (表單)組件提供了表單驗(yàn)證的功能,只需要通過(guò) rules 屬性傳入約定的驗(yàn)證規(guī)則,并將 Form-Item 的 prop 屬性設(shè)置為需校驗(yàn)的字段名即可。

  注意:prop對(duì)應(yīng)表單域 model 字段,使用 validate方法時(shí),該屬性是必填的。

  表單驗(yàn)證rules

  以官網(wǎng)給出的例子分析來(lái)看

  將prop屬性設(shè)置為需校驗(yàn)的字段名。

1.jpg

  在data里配置要校驗(yàn)字段和校驗(yàn)規(guī)則:

  required:true表示為必須輸入;

  message:""設(shè)置不符合校驗(yàn)規(guī)則時(shí)的提示信息;

  trigger:""設(shè)置校驗(yàn)的觸發(fā)方式:

  ‘change’:數(shù)據(jù)改變時(shí)觸發(fā);

  ‘blur’:失去焦點(diǎn)時(shí)觸發(fā);

  沒(méi)有進(jìn)行任何輸入時(shí),不會(huì)觸發(fā)change,但一定會(huì)觸發(fā)blur事件。

2.png

  設(shè)置校驗(yàn)規(guī)則后,表頭會(huì)出現(xiàn)紅色*樣式

00.png


  該示例完整代碼:

  <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
  <el-form-item label="活動(dòng)名稱(chēng)" prop="name">
  <el-input v-model="ruleForm.name"></el-input>
  </el-form-item>
  <el-form-item label="活動(dòng)區(qū)域" prop="region">
  <el-select v-model="ruleForm.region" placeholder="請(qǐng)選擇活動(dòng)區(qū)域">
  <el-option label="區(qū)域一" value="shanghai"></el-option>
  <el-option label="區(qū)域二" value="beijing"></el-option>
  </el-select>
  </el-form-item>
  <el-form-item label="活動(dòng)時(shí)間" required>
  <el-col :span="11">
  <el-form-item prop="date1">
  <el-date-picker type="date" placeholder="選擇日期" v-model="ruleForm.date1" style="width: 100%;"></el-date-picker>
  </el-form-item>
  </el-col>
  <el-col class="line" :span="2">-</el-col>
  <el-col :span="11">
  <el-form-item prop="date2">
  <el-time-picker placeholder="選擇時(shí)間" v-model="ruleForm.date2" style="width: 100%;"></el-time-picker>
  </el-form-item>
  </el-col>
  </el-form-item>
  <el-form-item label="即時(shí)配送" prop="delivery">
  <el-switch v-model="ruleForm.delivery"></el-switch>
  </el-form-item>
  <el-form-item label="活動(dòng)性質(zhì)" prop="type">
  <el-checkbox-group v-model="ruleForm.type">
  <el-checkbox label="美食/餐廳線上活動(dòng)" name="type"></el-checkbox>
  <el-checkbox label="地推活動(dòng)" name="type"></el-checkbox>
  <el-checkbox label="線下主題活動(dòng)" name="type"></el-checkbox>
  <el-checkbox label="單純品牌曝光" name="type"></el-checkbox>
  </el-checkbox-group>
  </el-form-item>
  <el-form-item label="特殊資源" prop="resource">
  <el-radio-group v-model="ruleForm.resource">
  <el-radio label="線上品牌商贊助"></el-radio>
  <el-radio label="線下場(chǎng)地免費(fèi)"></el-radio>
  </el-radio-group>
  </el-form-item>
  <el-form-item label="活動(dòng)形式" prop="desc">
  <el-input type="textarea" v-model="ruleForm.desc"></el-input>
  </el-form-item>
  <el-form-item>
  <el-button type="primary" @click="submitForm('ruleForm')">立即創(chuàng)建</el-button>
  <el-button @click="resetForm('ruleForm')">重置</el-button>
  </el-form-item>
  </el-form>
  <script>
  export default {
  data() {
  return {
  ruleForm: {
  name: '',
  region: '',
  date1: '',
  date2: '',
  delivery: false,
  type: [],
  resource: '',
  desc: ''
  },
  rules: {
  name: [
  { required: true, message: '請(qǐng)輸入活動(dòng)名稱(chēng)', trigger: 'blur' },
  { min: 3, max: 5, message: '長(zhǎng)度在 3 到 5 個(gè)字符', trigger: 'blur' }
  ],
  region: [
  { required: true, message: '請(qǐng)選擇活動(dòng)區(qū)域', trigger: 'change' }
  ],
  date1: [
  { type: 'date', required: true, message: '請(qǐng)選擇日期', trigger: 'change' }
  ],
  date2: [
  { type: 'date', required: true, message: '請(qǐng)選擇時(shí)間', trigger: 'change' }
  ],
  type: [
  { type: 'array', required: true, message: '請(qǐng)至少選擇一個(gè)活動(dòng)性質(zhì)', trigger: 'change' }
  ],
  resource: [
  { required: true, message: '請(qǐng)選擇活動(dòng)資源', trigger: 'change' }
  ],
  desc: [
  { required: true, message: '請(qǐng)?zhí)顚?xiě)活動(dòng)形式', trigger: 'blur' }
  ]
  }
  };
  },
  methods: {
  submitForm(formName) {
  this.$refs[formName].validate((valid) => {
  if (valid) {
  alert('submit!');
  } else {
  console.log('error submit!!');
  return false;
  }
  });
  },
  resetForm(formName) {
  this.$refs[formName].resetFields();
  }
  }
  }
  </script>

  自定義校驗(yàn)規(guī)則

  除此之外,還可以使用validator驗(yàn)證器來(lái)自定義校驗(yàn)規(guī)則,

  舉一個(gè)使用自定義驗(yàn)證規(guī)則來(lái)完成密碼的二次驗(yàn)證的例子。

4.png

  還是和之前一樣,設(shè)置prop需校驗(yàn)的字段名和v-model綁定值

0.png

  但這時(shí),我們需要在data中自己定義校驗(yàn)規(guī)則,需要注意的是,設(shè)置的規(guī)則與return同級(jí)。

5.png

  在rules中配置要校驗(yàn)的字段和用到的規(guī)則

6.png

  完整代碼如下:

  <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
  <el-form-item label="密碼" prop="pass">
  <el-input type="password" v-model="ruleForm.pass" autocomplete="off"></el-input>
  </el-form-item>
  <el-form-item label="確認(rèn)密碼" prop="checkPass">
  <el-input type="password" v-model="ruleForm.checkPass" autocomplete="off"></el-input>
  </el-form-item>
  <el-form-item label="年齡" prop="age">
  <el-input v-model.number="ruleForm.age"></el-input>
  </el-form-item>
  <el-form-item>
  <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
  <el-button @click="resetForm('ruleForm')">重置</el-button>
  </el-form-item>
  </el-form>
  <script>
  export default {
  data() {
  var checkAge = (rule, value, callback) => {
  if (!value) {
  return callback(new Error('年齡不能為空'));
  }
  setTimeout(() => {
  if (!Number.isInteger(value)) {
  callback(new Error('請(qǐng)輸入數(shù)字值'));
  } else {
  if (value < 18) {
  callback(new Error('必須年滿18歲'));
  } else {
  callback();
  }
  }
  }, 1000);
  };
  var validatePass = (rule, value, callback) => {
  if (value === '') {
  callback(new Error('請(qǐng)輸入密碼'));
  } else {
  if (this.ruleForm.checkPass !== '') {
  this.$refs.ruleForm.validateField('checkPass');
  }
  callback();
  }
  };
  var validatePass2 = (rule, value, callback) => {
  if (value === '') {
  callback(new Error('請(qǐng)?jiān)俅屋斎朊艽a'));
  } else if (value !== this.ruleForm.pass) {
  callback(new Error('兩次輸入密碼不一致!'));
  } else {
  callback();
  }
  };
  return {
  ruleForm: {
  pass: '',
  checkPass: '',
  age: ''
  },
  rules: {
  pass: [
  { validator: validatePass, trigger: 'blur' }
  ],
  checkPass: [
  { validator: validatePass2, trigger: 'blur' }
  ],
  age: [
  { validator: checkAge, trigger: 'blur' }
  ]
  }
  };
  },
  methods: {
  submitForm(formName) {
  this.$refs[formName].validate((valid) => {
  if (valid) {
  alert('submit!');
  } else {
  console.log('error submit!!');
  return false;
  }
  });
  },
  resetForm(formName) {
  this.$refs[formName].resetFields();
  }
  }
  }
  </script>

         本篇內(nèi)容已結(jié)束,歡迎大家更多精彩內(nèi)容。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/128382.html

相關(guān)文章

  • va.js——Vue 表單驗(yàn)證插件寫(xiě)作過(guò)程

    摘要:一表單驗(yàn)證模塊的構(gòu)成任何表單驗(yàn)證模塊都是由配置校驗(yàn)報(bào)錯(cuò)取值這幾部分構(gòu)成的。其實(shí)我是想寫(xiě)個(gè)指令來(lái)完成表單驗(yàn)證的事的。當(dāng)然表單驗(yàn)證這種是高度定制化的。 前言 前段時(shí)間,老大搭好了Vue的開(kāi)發(fā)環(huán)境,于是我們愉快地從JQ來(lái)到了Vue。這中間做的時(shí)候,在表單驗(yàn)證上做的不開(kāi)心,看到vue的插件章節(jié),感覺(jué)自己也能寫(xiě)一個(gè),因此就自己開(kāi)始寫(xiě)了一個(gè)表單驗(yàn)證插件va.js。 當(dāng)然為什么不找個(gè)插件呢? vu...

    suosuopuo 評(píng)論0 收藏0
  • 封裝Vue組件一些技巧

    摘要:根據(jù)組件單向數(shù)據(jù)流和和事件通信機(jī)制,需要由子組件通過(guò)事件通知父組件,并在父組件中修改原始的數(shù)據(jù),完成狀態(tài)的更新。 本文同步在個(gè)人博客shymean.com上,歡迎關(guān)注 寫(xiě)Vue有很長(zhǎng)一段時(shí)間了,除了常規(guī)的業(yè)務(wù)開(kāi)發(fā)之外,也應(yīng)該思考和反思一下封裝組件的正確方式。以彈窗組件為例,一種實(shí)現(xiàn)是在需要模板中引入需要彈窗展示的組件,然后通過(guò)一個(gè)flag變量來(lái)控制彈窗的組件,在業(yè)務(wù)代碼里面會(huì)充斥著冗余的彈...

    韓冰 評(píng)論0 收藏0
  • 使用vue自定義指令開(kāi)發(fā)一個(gè)表單驗(yàn)證插件validate.js

    摘要:今天就來(lái)介紹一下如何利用的自定義指令來(lái)開(kāi)發(fā)一個(gè)表單驗(yàn)證插件的過(guò)程。按照這種方式就能夠使用自己開(kāi)發(fā)的這個(gè)表單校驗(yàn)插件。這段時(shí)間在進(jìn)行一個(gè)新項(xiàng)目的前期搭建,新項(xiàng)目框架采用vue-cli3和typescirpt搭建。因?yàn)轫?xiàng)目比較輕量,所以基本沒(méi)有使用額外的ui組件,有時(shí)候我們需要的一些基礎(chǔ)組件我就直接自己開(kāi)發(fā)了。今天就來(lái)介紹一下如何利用vue的自定義指令directive來(lái)開(kāi)發(fā)一個(gè)表單驗(yàn)證插件的過(guò)...

    warnerwu 評(píng)論0 收藏0
  • Vue 進(jìn)階系列(二)之插件原理實(shí)現(xiàn)

    摘要:示例輸出第一步先不考慮插件,在已有的中是沒(méi)有這個(gè)公共方法的,如果要簡(jiǎn)單實(shí)現(xiàn)的話可以通過(guò)鉤子函數(shù)來(lái),即在里面驗(yàn)證邏輯。按照插件的開(kāi)發(fā)流程,應(yīng)該有一個(gè)公開(kāi)方法,在里面使用全局的方法添加一些組件選項(xiàng),方法包含一個(gè)鉤子函數(shù),在鉤子函數(shù)中驗(yàn)證。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo))showImg(https://segmen...

    wuaiqiu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<