vue @vuelidate父子组件绑定注意事项

 更新时间:2025年02月17日 15:29:34   作者:坚定信念,勇往无前  
Vue@vuelidate父子组件验证时,不能直接绑定,需在子组件验证方法内部进行绑定,以避免父组件验证时包含子组件的验证

vue @vuelidate父子组件绑定注意

如果父子组件都有验证的,不能这样写

	const V2$ = useVuelidate(rules, formdata)
	const submitBtn = async () => {
		const V2$ = useVuelidate(rules, formdata)

如果这样写的话,在父组件验证时,也会把子组件的验证代上。

正确写法

	const submitBtn = async () => {
		const V2$ = useVuelidate(rules, formdata)
		 let validate =await V2$.value.$validate()

要在自己验证的方法内部进行绑定

Vuelidate表单验证规则

Vuelidate中的必填验证规则

用到的技术 vue + quasar + vuelidate(网址)

引用方法如下:

 Vue.use(window.vuelidate.default)
 var minLength = window.validators.minLength
 var required = window.validators.required 
 var requiredIf = window.validators.requiredIf
 var email = window.validators.email
 var helpers = window.validators.helpers

 validations: {
	baseInfoForm: {
        mobilePhone:{ required: required },        
        col19:{ required: required },                 
        kitchenTime:{  required: requiredIf(function(baseInfoForm) {
          return baseInfoForm.col19 == 'Y'  
          //当col19的值为Y时,才有kitchenTime的验证
        })}        


  }

一个简单的例子:

<q-field 
icon="stay_primary_portrait"
:error="readonly == false? $v.baseInfoForm.mobilePhone.$error: false"
error-label="手机号码不能为空"  //警告提示信息
class="col-lg-4 col-md-6 col-sm-12 col-xs-12">
  <q-input
   :readonly="readonly"  
   @blur="$v.baseInfoForm.mobilePhone.$touch"
   :float-label="$t('手机号码')"
   type="number"
   v-model="baseInfoForm.mobilePhone"></q-input>
</q-field>
<q-field
v-if="baseInfoForm.col19 == 'Y' "
icon="access_time"
:error="readonly == false? $v.baseInfoForm.kitchenTime.$error: false"
error-label="进入厨电行业时间不能为空"
class="col-lg-4 col-md-6 col-sm-12 col-xs-12">
  <q-datetime
   type="date"
   format="YYYY-MM-DD"
   format-model="string"
   :float-label="$t('若是,进入厨电行业时间')"
   @blur="$v.baseInfoForm.kitchenTime.$touch"
    v-model="baseInfoForm.kitchenTime"></q-datetime>
</q-field>

效果如下:

具体代码实现如下:

    <div id="q-supplierBaseInfo" v-cloak>
      <q-field 
   		icon="stay_primary_portrait"
        :error="readonly == false? $v.baseInfoForm.mobilePhone.$error: false"
        error-label="手机号码不能为空"
        class="col-lg-4 col-md-6 col-sm-12 col-xs-12">
        <q-input
          :readonly="readonly"  
           @blur="$v.baseInfoForm.mobilePhone.$touch"
           :float-label="$t('手机号码')"
           type="number"
           v-model="baseInfoForm.mobilePhone"></q-input>
      </q-field>
      <q-field 
         icon="work"
         :error="readonly == false? $v.baseInfoForm.col19.$error: false"
         error-label="是否为供应商不能为空"
         class="col-lg-4 col-md-6 col-sm-12 col-xs-12">
         <q-select
           @blur="$v.baseInfoForm.col19.$touch"
           :float-label="$t('是否为供应商')"
           :options="col19Options"
           v-model="baseInfoForm.col19"></q-select>
      </q-field>       
    </div>
   
    <script>
      // quasar components use
      Quasar.i18n.set(Quasar.i18n[LANGUGE])
      Vue.use(window.vuelidate.default)
      var minLength = window.validators.minLength
      var required = window.validators.required
      var requiredIf = window.validators.requiredIf
      var helpers = window.validators.helpers
      var supplierInvite = new Vue({
        el: '#q-supplierBaseInfo',
        i18n: i18n,
        data: function() {
          return {
            col19Options:[
              {
                label: '是',
                value: 'Y'
              },
              {
                label: '否',
                value: 'N'
              }
            ],
            baseInfoForm: { col19:''}
        },
        validations: {
          baseInfoForm: {
            col19:{ required: required },            
            kitchenTime:{  required: requiredIf(function(baseInfoForm) {
              return baseInfoForm.col19 == 'Y'           
            })}                                       
          }
        }
      })
    </script>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vxe-table动态渲染列,刷新列宽的方式

    vxe-table动态渲染列,刷新列宽的方式

    这篇文章主要介绍了vxe-table动态渲染列,刷新列宽的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • 全面解析vue中的数据双向绑定

    全面解析vue中的数据双向绑定

    这篇文章主要介绍了vue中的数据双向绑定问题,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-05-05
  • Vue.js 中 LocalStorage 与 SessionStorage操作示例最佳实践

    Vue.js 中 LocalStorage 与 SessionStorage操作示例最佳实践

    文章介绍了LocalStorage和SessionStorage的区别,包括生命周期、作用域、数据类型限制、基础操作和进阶应用场景,同时,还讨论了最佳实践、注意事项和常见错误及其解决方案,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • 一步步详细讲解vue3配置ESLint

    一步步详细讲解vue3配置ESLint

    ESLint主要用于代码规范、统一代码风格,下面这篇文章主要给大家介绍了关于vue3配置ESLint的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • vue elementui表格获取某行数据(slot-scope和selection-change方法使用)

    vue elementui表格获取某行数据(slot-scope和selection-change方法使用)

    这篇文章主要介绍了vue elementui表格获取某行数据(slot-scope和selection-change方法使用),本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • Vue中的watch是什么以及watch和computed的区别

    Vue中的watch是什么以及watch和computed的区别

    这篇文章主要介绍了Vue中的watch是什么以及watch和computed的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • VUE搭建手机商城心得和遇到的坑

    VUE搭建手机商城心得和遇到的坑

    这篇文章主要介绍了VUE搭建手机商城心得和遇到的坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • vue项目内存溢出问题及解决方案

    vue项目内存溢出问题及解决方案

    这篇文章主要介绍了vue项目内存溢出问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Vue组件之间四种通信方式详解

    Vue组件之间四种通信方式详解

    vue框架提供了前端开发组件的思想,可以通过组件来组合成一个完整的页面,都是随着组件数量原来越多,组件之间难免需要相互通信。本文将为大家介绍四种组件间的通信方式,需要的可以参考一下
    2022-01-01
  • Vue使用ElementUI动态修改table单元格背景颜色或文本颜色

    Vue使用ElementUI动态修改table单元格背景颜色或文本颜色

    本文主要介绍了Vue使用ElementUI动态修改table单元格背景颜色或文本颜色,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02

最新评论