鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ vee-validate多父組件、子組件、子孫組件校驗(yàn)問題

vee-validate多父組件、子組件、子孫組件校驗(yàn)問題

<template>
    <div>
        <basic-info v-if="pBasicInfoVO.isShow"></basic-info>
        <sku-info v-if="pSkuInfoListVO.isShow"></sku-info>
        <delivery-info v-if="pDeliveryInfoVO.isShow"></delivery-info>
        <ware-house v-if="pWarehouseInfoVO.isShow"></ware-house>
        <description-info v-if="pDescriptionsInfoVO.isShow"></description-info>
        <account-info v-if="pManAccountVO.isShow"></account-info>
        <ordiary-info v-if="pOrdinaryAttrInfoVO.isShow"></ordiary-info>
        <business-relate v-if="pBusinessRelateInfoVO.isShow"></business-relate>
        <div class="footer">
            <a href="javascript:;" class="btn btn-success" @click="saveWarePublishVO">Save</a>
            <a href="javascript:;" class="btn btn-cancel">Cancel</a>
        </div>
    </div>
</template>

有以上導(dǎo)航頁面,點(diǎn)擊save的時候,取反isValidate:

saveWarePublishVO() {
        this.setIsValidate(!this.isValidate)
        let isBasicInfoVOValid = this.basicInfoVO.validateFlag
        let isSkuInfoVOValid = this.skuInfoListVO.validateFlag
    
        this.$store.dispatch(type.SAVE_WARE_INFO)
    }
 

然后每個組件監(jiān)聽isValidate字段,設(shè)置各個模塊的有效標(biāo)志位:

watch: {
    isValidate() {
        this.$validator.validateAll().then((flag) => {
            if (!isRepeate && flag) {
                this.setBasicInfoValidateFlag(flag)
            }
        })
    }
}

但是由于vee-validate方法中的validateAll是異步執(zhí)行的,點(diǎn)擊save的時候是同步執(zhí)行的,導(dǎo)致第一次點(diǎn)擊save不會觸發(fā)watch,請問如何解決這個問題?

回答
編輯回答
貓館

你可以在save的時候,校驗(yàn)成功再去做后續(xù)的操作,為啥要監(jiān)聽一個屬性呢

2017年5月17日 09:31
編輯回答
情未了

就是去保存是時候異步校驗(yàn)去了,校驗(yàn)未完成就保存去了。你回答的是啥暈

2018年1月24日 04:22