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

Vue.js如何優(yōu)雅的進(jìn)行form validation

 更新時(shí)間:2017年04月07日 15:24:26   投稿:lijiao  
Vue.js如何優(yōu)雅的進(jìn)行form validation,針對(duì)此問(wèn)題,給出了多個(gè)網(wǎng)友的回答,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文針對(duì)知乎上關(guān)于Vue.js如何優(yōu)雅的進(jìn)行form validation問(wèn)題進(jìn)行了整理,供大家參考,具體內(nèi)容如下

Vue.js如何優(yōu)雅的進(jìn)行form validation?

1. 所有validation rules是被集中管理,而不是每個(gè)文件自己一種,導(dǎo)致驗(yàn)證規(guī)則冗余。
2. 能夠進(jìn)行remote validate。
3. 不用JQuery。

現(xiàn)有的插件vuejs/vue-validator · GitHub只能實(shí)現(xiàn)普通驗(yàn)證,但如何解決1,因?yàn)関ue-validator沒(méi)有把校驗(yàn)規(guī)則給抽象出來(lái),沒(méi)辦法,現(xiàn)在只能自己代碼上再抽出一層rules來(lái)管理。remote validation只能手寫(xiě)借助Jquery ajax來(lái)驗(yàn)證。

網(wǎng)友1、曾廣營(yíng)

這個(gè)現(xiàn)在我可以回答了。

我覺(jué)得 vue-validator 太冗余了。所以自己寫(xiě)了個(gè)項(xiàng)目用的插件 va.js,它實(shí)現(xiàn)了

集中式的管理 校驗(yàn)規(guī)則 和 報(bào)錯(cuò)模板。

報(bào)錯(cuò)時(shí)機(jī)可選

校驗(yàn)正確后的數(shù)據(jù),已經(jīng)打包成對(duì)象,可以直接用

允許各個(gè)頁(yè)面對(duì)規(guī)則進(jìn)行覆蓋,對(duì)報(bào)錯(cuò)信息進(jìn)行自定義修改,以及允許ajax獲取數(shù)據(jù)后,再對(duì)規(guī)則進(jìn)行補(bǔ)充

按順序來(lái)校驗(yàn)報(bào)錯(cuò)

我寫(xiě)了一篇博文來(lái)記載

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

我個(gè)人觀點(diǎn)。表單驗(yàn)證的是一種高度定制化的東東。所以網(wǎng)上用的插件,都會(huì)有不盡人意的感覺(jué),因?yàn)橐慈哂?,要么不夠。因此,我分享了思路和源碼。真的想寫(xiě)的話,借鑒思路自己寫(xiě)吧。

補(bǔ)充:

1.自定義的js函數(shù)規(guī)則,可以自己再加入。 有個(gè)存儲(chǔ)校驗(yàn)函數(shù)的對(duì)象,可以擴(kuò)展。
2.對(duì)ajax的處理僅僅是暴露通過(guò)校驗(yàn)的數(shù)據(jù)的對(duì)象。即假如在ajax前不需驗(yàn)證的話,這份暴露出來(lái)的數(shù)據(jù)是可以提交的;假如需要驗(yàn)證,可以使用這個(gè)暴露出來(lái)的數(shù)據(jù),對(duì)單個(gè)或多個(gè)字段加上額外的校驗(yàn)。 

網(wǎng)友2、冉聰杰

推薦:vee-validate https://github.com/logaretm/vee-validate/

網(wǎng)友3、李文富

自己簡(jiǎn)單寫(xiě)一個(gè),支持異步,支持任意 Vue Component,不限定于 Form Element。

來(lái)自:https://github.com/crossjs/plato/blob/master/src/modules/validator/index.js

看 return 部分即可:

import Vue from 'vue'
import * as rules from './rules'
import promisify from 'util/promisify'

export default (context, options = {}) => {
 // options = { scope: 'validator', prefix: '/', ...options }

 // 只注冊(cè)回調(diào),不注冊(cè)數(shù)據(jù)
 return () => {
 Vue.mixin({
  beforeCreate () {
  const options = this.$options
  const { validator } = options

  if (validator) {
   // 在入口處定義 $validation
   Vue.util.defineReactive(this, '$validation', {
   fields: [],
   errors: []
   })
   this.$validator = this
   nextTick(this, validator.auto)
  } else {
   const { parent } = options
   if (parent && parent.$validation) {
   this.$validation = parent.$validation
   this.$validator = parent.$validator
   nextTick(this, parent.$validator.$options.validator.auto)
   }
  }
  }
 })

 /**
  * $validate
  *
  * validate vm recursively.
  *
  * @return {Promise}
  */
 Vue.prototype.$validate = function (fromEntry) {
  const { validate, $validation = {}, $validator } = this

  // 如果此處為校驗(yàn)入口
  if ($validator === this && !fromEntry) {
  // 頂級(jí)往下校驗(yàn)所有子組件
  return Promise.all($validation.fields
   .map(field => field.$validate(true)))
   .then(() => $validation)
   .catch(() => Promise.reject($validation))
  } else {
  if (!validate) {
   return Promise.resolve($validation)
  }
  return Promise.all(Object.keys(validate).map(key => {
   return new Promise((resolve, reject) => {
   const { validator = rules[key], rule, message } = validate[key]
   if (validator) {
    // reject if falsy
    promisify(validator(this.value, rule), true)
    .then(resolve)
    .catch(() => {
     reject({
     field: this.field || this,
     rule,
     message
     })
    })
   } else {
    __PROD__ || console.warn(`'${key}' is NOT a valid validator`)
    resolve()
   }
   })
  })).then(() => {
   updateErrors($validation.errors, this)
   return $validation
  }).catch(error => {
   updateErrors($validation.errors, this, error)
   return Promise.reject($validation)
  })
  }
 }

 function updateErrors (errors, vm, replacement) {
  const field = vm.field || vm
  const found = errors.some((error, index) => {
  if (error.field === field) {
   if (replacement) {
   errors.splice(index, 1, replacement)
   } else {
   errors.splice(index, 1)
   }
   return true
  }
  return false
  })

  if (!found && replacement) {
  errors.push(replacement)
  }

  return errors
 }

 function nextTick (vm, auto) {
  vm.$nextTick(() => {
  // 定義了校驗(yàn)規(guī)則
  if (vm.validate) {
   vm.$validation.fields.push(vm)
   // 加載完成自動(dòng)檢查
   if (auto) {
   vm.$validate()
   }
  }
  })
 }
 }
}

還有一個(gè)網(wǎng)友推薦的:試試這個(gè)自帶氣泡提示的vue校驗(yàn)插件,配合vue-hook-form能夠輕松實(shí)現(xiàn)表單校驗(yàn)

以上就是整理的關(guān)于此類(lèi)問(wèn)題的幾個(gè)不錯(cuò)的回答,如果大家有更好的答案歡迎分享,希望本文對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue中預(yù)覽zip的實(shí)現(xiàn)示例

    vue中預(yù)覽zip的實(shí)現(xiàn)示例

    打包壓縮成zip的東西,再解壓,很麻煩,本文主要介紹了vue中預(yù)覽zip的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Vite中Rollup打包的實(shí)現(xiàn)

    Vite中Rollup打包的實(shí)現(xiàn)

    Rollup是一個(gè)JavaScript模塊打包器,它可以將多個(gè)小的JavaScript 模塊打包成一個(gè)大的模塊,本文主要介紹了Vite中Rollup打包的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • 關(guān)于Pinia狀態(tài)持久化問(wèn)題

    關(guān)于Pinia狀態(tài)持久化問(wèn)題

    這篇文章主要介紹了關(guān)于Pinia狀態(tài)持久化問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2023-03-03
  • Vue3+Vite項(xiàng)目按需自動(dòng)導(dǎo)入配置以及一些常見(jiàn)問(wèn)題修復(fù)

    Vue3+Vite項(xiàng)目按需自動(dòng)導(dǎo)入配置以及一些常見(jiàn)問(wèn)題修復(fù)

    Vite是一種新型前端構(gòu)建工具,能夠顯著提升前端開(kāi)發(fā)體驗(yàn),下面這篇文章主要給大家介紹了關(guān)于Vue3+Vite項(xiàng)目按需自動(dòng)導(dǎo)入配置以及一些常見(jiàn)問(wèn)題修復(fù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • vue中集成省市區(qū)街四級(jí)地址組件的實(shí)現(xiàn)過(guò)程

    vue中集成省市區(qū)街四級(jí)地址組件的實(shí)現(xiàn)過(guò)程

    我們?cè)陂_(kāi)發(fā)中常會(huì)遇到選擇地址的需求,有時(shí)候只需要選擇省就可以,有時(shí)候則需要選擇到市、縣,以至于鄉(xiāng)鎮(zhèn),甚至哪個(gè)村都有可能,下面這篇文章主要給大家介紹了關(guān)于vue中集成省市區(qū)街四級(jí)地址組件的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Vue實(shí)現(xiàn)倒計(jì)時(shí)小功能

    Vue實(shí)現(xiàn)倒計(jì)時(shí)小功能

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)倒計(jì)時(shí)小功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vite配置別名并處理報(bào)錯(cuò):找不到模塊“xxx”或其相應(yīng)的類(lèi)型聲明方法詳解

    vite配置別名并處理報(bào)錯(cuò):找不到模塊“xxx”或其相應(yīng)的類(lèi)型聲明方法詳解

    我在學(xué)習(xí)vue3+vite+ts的時(shí)候,在配置別名這一步的時(shí)候遇到了一個(gè)問(wèn)題,這篇文章主要給大家介紹了關(guān)于vite配置別名并處理報(bào)錯(cuò):找不到模塊“xxx”或其相應(yīng)的類(lèi)型聲明的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 在Vue中配置代理服務(wù)器的方法詳解

    在Vue中配置代理服務(wù)器的方法詳解

    這篇文章主要給大家介紹了關(guān)于如何在Vue中配置代理服務(wù)器的相關(guān)資料,文中通過(guò)圖文以及示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-12-12
  • vue實(shí)現(xiàn)消息列表向上無(wú)縫滾動(dòng)效果

    vue實(shí)現(xiàn)消息列表向上無(wú)縫滾動(dòng)效果

    本文主要實(shí)現(xiàn)vue項(xiàng)目中,消息列表逐條向上無(wú)縫滾動(dòng),每條消息展示10秒后再滾動(dòng),為了保證用戶(hù)能看清消息主題,未使用第三方插件,本文實(shí)現(xiàn)方法比較簡(jiǎn)約,需要的朋友可以參考下
    2024-06-06
  • vue渲染時(shí)閃爍{{}}的問(wèn)題及解決方法

    vue渲染時(shí)閃爍{{}}的問(wèn)題及解決方法

    v-if和v-show可能是日常開(kāi)發(fā)中最常用的兩個(gè)指令,雖然看上去兩者功能是類(lèi)似的,但是兩者還是存在很大區(qū)別的。接下來(lái)通過(guò)本文給大家分享vue渲染時(shí)閃爍{{}}的問(wèn)題及解決方法,感興趣的朋友一起看看吧
    2018-03-03

最新評(píng)論

永胜县| 探索| 会昌县| 潮州市| 平凉市| 梧州市| 乌拉特前旗| 肥乡县| 衡东县| 乌兰县| 抚顺市| 绥棱县| 呼玛县| 大洼县| 启东市| 会同县| 茂名市| 岑溪市| 隆回县| 淮滨县| 潜江市| 肇源县| 平潭县| 汉阴县| 岐山县| 南川市| 盐津县| 周宁县| 神池县| 个旧市| 盈江县| 汶上县| 古交市| 长顺县| 岱山县| 九寨沟县| 凤冈县| 长海县| 达州市| 永清县| 封丘县|