Skip to content

同时校验多个表单

element的表单的校验是一个异步过程,如果需要同时校验,则需要配合promise的all方法。

html
<script>
	export default {
		methods: {
            async confirm(row) {
		    	  const validates = await Promise.all([
		    		this.promiseValidate("name_ref" + row.contral.index),
		    		this.promiseValidate("startDate_ref" + row.contral.index),
		    		this.promiseValidate("duration_ref" + row.contral.index),
		    		this.promiseValidate("each_issue_ref" + row.contral.index)
		    	])
		    	if (validates.every(item => item)) {
		    		row.contral.change = false
		    	}
		    },
		    promiseValidate(key) {
		    	return new Promise((resolve, reject) => {
		    		try {
		    			this.$refs[key].validate(isValid => {
		    				resolve(isValid)
		    			})
		    		} catch (err) {
		    			reject(err)
		    		}
		    	})
		    },
        }
    }
</script>
<script>
	export default {
		methods: {
            async confirm(row) {
		    	  const validates = await Promise.all([
		    		this.promiseValidate("name_ref" + row.contral.index),
		    		this.promiseValidate("startDate_ref" + row.contral.index),
		    		this.promiseValidate("duration_ref" + row.contral.index),
		    		this.promiseValidate("each_issue_ref" + row.contral.index)
		    	])
		    	if (validates.every(item => item)) {
		    		row.contral.change = false
		    	}
		    },
		    promiseValidate(key) {
		    	return new Promise((resolve, reject) => {
		    		try {
		    			this.$refs[key].validate(isValid => {
		    				resolve(isValid)
		    			})
		    		} catch (err) {
		    			reject(err)
		    		}
		    	})
		    },
        }
    }
</script>

校验v-for生成的表单

element的表单通过vue2提供的 v-for 之后,获得的ref会变成一个数组,这时仅需在指定代码位置添加一个[0]即可正常获得dom元素。

html
<script>
	export default {
		methods: {
        test() {
          this.$refs[key][0].validate(isValid => {
				    resolve(isValid)
			    })
        }
      }
    }
</script>
<script>
	export default {
		methods: {
        test() {
          this.$refs[key][0].validate(isValid => {
				    resolve(isValid)
			    })
        }
      }
    }
</script>

表单校验 + v-for + 仅校验checked部分