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

iView UI FORM 動態(tài)添加表單項校驗規(guī)則寫法實例

 更新時間:2023年01月17日 09:44:07   作者:漸行漸遠  
這篇文章主要為大家介紹了iView UI FORM 動態(tài)添加表單項校驗規(guī)則寫法實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

IView UI 表單驗證 深入了解

在開發(fā)xxx需求中,有個交互是動態(tài)添加問題項,并需要做表單驗證,在做動態(tài)表單驗證的過程中遇到了問題,記錄下這次是如何解決的。

一直以來對UI框架的form表單驗證只局限于 在form 加上 model、rules 、在form-item加上prop,而且要prop要與modelrules的值對應,例如:

<template>
 <Form model="questionFormData" :rules="questionRules" refs="questionFormRefs">
    <FormItem prop="question" lable="問題描述">
      <Input v-model="questionFormData.question"></Input>
    </FormItem>
  </Form>
</template>
<script>
  export default {
    data() {
      return {
        questionFormData: {
          question: ''
        },
        questionRules: {
          question: [{
            { required: true, message: "不允許為空", trigger: "blur" },
          }]
        }
      }
    },
    methods: {
      handleSubmit() {
        this.$refs[name].validate(async valid => {
          // valid true驗證通過,false 驗證不通過
      	});
      }
    }
  }
</script>

這里要model="questionFormData"指向對應數(shù)據(jù)對象,:rules="questionRules"指對應規(guī)則,prop="question"指對應的表單項的要驗證的key(即questionFormData.question);以前只知道這么寫就能觸發(fā)驗證規(guī)則,但是具體的原理不太清楚。

這次需要動態(tài)添加表單項,就是循環(huán)渲染FormItem,可問題來了,我要怎么去定義這個proprules,帶著疑問,我查了一下iView官網(wǎng),在FORM下找到對應例子

:prop="'items.' + index + '.value'"
:rules="{required: true, message: 'Item ' + item.index +' can not be empty', trigger: 'blur'}"

原來可以動態(tài)添加prop rules,只要將prop指向對應的下標即可,重新調整了一下代碼

<template>
<Form model="questionFormData" :rules="questionRules" refs="questionFormRefs">
    <FormItem 
        v-for="(item, index) of questionFormData.questions"
        :prop="'questions.' + index +'.question'"
        :rules="{required: true, message: '問題' + (index + 1) + '不允許為空', trigger: 'blur'}"
        :lable="'問題' + (index + 1) +'描述"
    >
    <Input v-model="questionFormData.question[index]"></Input>
  </FormItem>
</Form>
</template>
<script>
	export default {
    data() {
      return {
        questionFormData: {
          questions: [{
            id: 1,
            question: '問題1'
          }, {
            id: 2,
            question: '問題2'
          }],
        },
        questionRules: {
        }
      }
    }
  }
</script>

經(jīng)過上面的調整,動態(tài)表單的驗證也生效了,這里需要注意,prop的值必須是questionFormData的key,即questions.[index].question,如上面的第一項的prop的值questions.0.question,如果換成items.0.question就不生效了。會報[iView warn]: please transfer a valid prop path to form item!,意思是說,prop的值在questionFormData中找不到。

動態(tài)表單的驗證總算解決了,但是對questions.[index].question有些疑問,FormItem是如何識別字符串,并與questionFormData的值關聯(lián)起來的。帶著問題看一下<FormItem>源碼。

探究原理

找到FormItem源碼,路徑node_modules/view-design/src/components/form/form-item.vue,在源碼中找到答案:

computed: {
  fieldValue () {
    // FormInstance 是當前Form的實例,獲取到model,也就是questionFormData
    const model = this.FormInstance.model;
    if (!model || !this.prop) { return; }
		// 此處的prop 就是 questions.0.question
    let path = this.prop;
    // 如果遇到:就替換為點,如questions:0.question -> questions.0.question
    if (path.indexOf(':') !== -1) {
      path = path.replace(/:/, '.');
    }
    // 獲取到questions.0.question在questionFormData的值
    return getPropByPath(model, path).v;
  },
},
function getPropByPath(obj, path) {
  // tempObj = questionFormData
  let tempObj = obj;
  // 將中括號替換為. 如 questions[0][question] -> questions.0.question
  path = path.replace(/\[(\w+)\]/g, '.$1'); 
  // 替換首個., .questions.0.question -> questions.0.question 最終處理成這個格式
  path = path.replace(/^\./, '');
  // 分割成數(shù)組 得到 ['questions','0','question']
  let keyArr = path.split('.');
  let i = 0;
	// 以 i = 0來查此處代碼作用
  for (let len = keyArr.length; i < len - 1; ++i) {
    // key = questions
    let key = keyArr[i];
    // questions 在 questionFormData中,進入為true的代碼塊
    if (key in tempObj) {
      // tempObj = questions
      tempObj = tempObj[key];
    } else {
      throw new Error('[iView warn]: please transfer a valid prop path to form item!');
    }
  }
  return {
    o: tempObj, // { id: 1, question: '問題1' }
    k: keyArr[i], // question
    v: tempObj[keyArr[i]] // 問題1
  };
 }

原來是通過.去分割為數(shù)據(jù),數(shù)組的值以key的形式去訪問model對象,匹配上對應的值。當匹配不上值是會拋出'[iView warn]: please transfer a valid prop path to form item!'錯誤。

總結:通過閱讀源碼,我們可以發(fā)現(xiàn)動態(tài)添加校驗規(guī)則不止可以用key.[index].key的方式,還可以通過[key][index][key]字符串的方式去定義prop,不過要注意**key要與model中的key一致**

以上就是iView UI FORM 動態(tài)添加表單項校驗規(guī)則寫法實例的詳細內(nèi)容,更多關于iView UI FORM 表單項校驗規(guī)則的資料請關注腳本之家其它相關文章!

相關文章

  • vue中的localStorage使用方法詳解

    vue中的localStorage使用方法詳解

    在Vue項目中可以直接使用localStorage,它支持Vue2和Vue3,在Vue2中,可以通過`localStorage.setItem()`、`localStorage.getItem()`和`localStorage.removeItem()`來保存、讀取和刪除數(shù)據(jù),本文給大家介紹vue中的localStorage使用詳解,感興趣的朋友一起看看吧
    2025-03-03
  • vue數(shù)組中不滿足條件跳出循環(huán)問題

    vue數(shù)組中不滿足條件跳出循環(huán)問題

    這篇文章主要介紹了vue數(shù)組中不滿足條件跳出循環(huán)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • cdn模式下vue的基本用法詳解

    cdn模式下vue的基本用法詳解

    這篇文章主要介紹了cdn模式下vue的基本用法,本文通過圖文并茂的形式給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-10-10
  • Vue.js中使用${}實現(xiàn)變量和字符串的拼接方式

    Vue.js中使用${}實現(xiàn)變量和字符串的拼接方式

    這篇文章主要介紹了Vue.js中使用${}實現(xiàn)變量和字符串的拼接方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • axios實現(xiàn)文件上傳并獲取進度

    axios實現(xiàn)文件上傳并獲取進度

    這篇文章主要為大家詳細介紹了axios實現(xiàn)文件上傳并獲取進度,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 解決vue-seamless-scroll滾動加點贊銜接處數(shù)據(jù)不同步問題

    解決vue-seamless-scroll滾動加點贊銜接處數(shù)據(jù)不同步問題

    這篇文章主要介紹了解決vue-seamless-scroll滾動加點贊銜接處數(shù)據(jù)不同步問題,初步判斷可能是因為下方懸接vue-seamless-scroll是靜態(tài)的,沒同步DOM,本文給大家分享解決方法,感興趣的朋友一起看看吧
    2021-11-11
  • vue全局實現(xiàn)數(shù)字千位分隔符格式

    vue全局實現(xiàn)數(shù)字千位分隔符格式

    這篇文章主要為大家詳細介紹了vue全局實現(xiàn)數(shù)字千位分隔符格式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 在vue中,v-for的索引index在html中的使用方法

    在vue中,v-for的索引index在html中的使用方法

    下面小編就為大家分享一篇在vue中,v-for的索引index在html中的使用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Vue頁面首次載入優(yōu)化的全過程

    Vue頁面首次載入優(yōu)化的全過程

    凡是做SPA的項目,特別是移動端的SAP項目,首屏加載速度必定是一個繞不過去的話題,下面這篇文章主要給大家介紹了關于Vue頁面首次載入優(yōu)化的相關資料,需要的朋友可以參考下
    2021-12-12
  • React組件通信之路由傳參(react-router-dom)

    React組件通信之路由傳參(react-router-dom)

    本文主要介紹了React組件通信之路由傳參(react-router-dom),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評論

临颍县| 宣汉县| 工布江达县| 伊通| 达孜县| 三门县| 茂名市| 桐城市| 元朗区| 秦安县| 绍兴县| 勃利县| 江孜县| 华容县| 云浮市| 石渠县| 姜堰市| 九台市| 隆化县| 武乡县| 定西市| 齐齐哈尔市| 阿拉尔市| 广昌县| 星子县| 巫山县| 托克托县| 衡南县| 宝兴县| 江孜县| 肇源县| 闸北区| 正镶白旗| 扎囊县| 湖南省| 永年县| 团风县| 赤壁市| 白沙| 泗阳县| 长岛县|