記錄父組件中調用子組件的表單驗證
子組件實現表單驗證
子組件中需要實現調用表單驗證的方法,子組件OrderInput.vue如下代碼:
<template> <div> <el-form :model="postForm" ref="postForm" label-width="100px" class="demo-ruleForm"> <el-form-item label="數值" prop="num" :rules="[{ required: true, message: '不能為空', trigger: 'change'}]" > <el-input type="number" v-model.number="postForm.num" autocomplete="off"></el-input> </el-form-item> </el-form> </div> </template> <script> export default { props: { obj: { type: Object, default: undefined } }, data(){ return { postForm: { num: this.obj?this.obj.num:undefined } } }, methods: { submitForm () { return new Promise(function (resolve, reject) { this.$refs.postForm.validate(valid => { resolve(valid) }) }) } } } </script>
submitForm()方法,就是子組件中實現的調用當前表單驗證的方法
父組件設置子組件的ref
父組件需要在使用子組件是,為子組件定義ref,之后再通過refs獲取子組件對象調用子組件的表單驗證方法。父組件實現如下:
<template> <div> <h1>驗證表單</h1> <order-input ref="order" :obj="postForm"></order-input> <el-button type="primary" @click="handleClick" > 提交 </el-button> </div> </template> <script> import OrderInput from './OrderInput' export default { components: { OrderInput }, data () { return { postForm: { age: undefined } } }, methods: { handleClick () { this.$refs.order.submitForm().then(valid => { if(valid){ console.log(valid, '提交表單') }else{ console.log(valid, '驗證不通過') } }) } } } </script>
