Vue解决父组件清空子组件的表单验证

1.页面上就一个简单的按钮 

 

 

 

2..当点击“显示子组件”按钮时,显示出被隐藏的表单

3.当用户直接点击”登录”按钮时,显示校验的错误信息

 

4.用户直接点击“隐藏”按钮时,表单被隐藏。但存在一个bug,当再次点击“显示子组件”的时候,表单上的错误信息仍然存在。因此需要清空掉子组件的表单错误信息

 

代码如下:

父组件:
<template>
    <div>
      <div>
        <el-button @click="showForm" type="primary" size="">清空子组件里面的form表单的验证</el-button>
      </div>
      <NewForm ref="newForm" v-show="isShow" @hidden="hidden"></NewForm>
    </div>
</template>

<script>
import NewForm from '@/components/NewForm'
export default {
  name: 'HelloTest',
  components: {
    NewForm
  },
  // eslint-disable-next-line space-before-function-paren
  data() {
    return {
      isShow: false
    }
  },
  methods: {
    showForm () {
      this.isShow = true
      this.$refs.newForm.$refs.refForm.clearValidate()
    },
    hidden () {
      this.isShow = false
    }
  }
}
</script>

<style scoped>

</style>

 

子组件:

<template>
  <div style="margin-top: 10px">
    <div style="min-width: 500px;max-width:800px;border: solid 1px #000;margin-left:auto;margin-right: auto">
      <el-form :model="form" :rules="rules" ref="refForm" label-width="80px" style="margin-top: 20px;margin-right: 20px;">
        <el-form-item label="用户名" prop="username">
          <el-input v-model="form.username"></el-input>
        </el-form-item>

        <el-form-item label="密码" prop="password">
          <el-input v-model="form.password" type="password"></el-input>
        </el-form-item>

        <el-form-item>
          <el-button @click="hidden">隐藏</el-button>
          <el-button @click="doLogin" type="primary">登录</el-button>
        </el-form-item>

      </el-form>
    </div>
  </div>
</template>

<script>
export default {
  name: 'NewForm',
  data () {
    return {
      // 表单的基本属性
      form: {
        username: '',
        password: ''
      },
      rules: {
        username: [
          { required: true, message: '请输入用户名', trigger: 'blur' }
        ],
        password: [
          { required: true, message: '请输入密码', trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    doLogin () {
      this.$refs.refForm.validate((valid) => {
        if (valid) {
          this.$message({message: '登录成功', type: 'success'})
        } else {
          this.$message({message: '登录失败', type: 'error'})
        }
      })
    },
    hidden () {
      this.$emit('hidden')
    }
  }
}
</script>

<style scoped>

</style>

 

1.在子组件上添加ref的属性,然后通过 this.$refs.属性名,获取子组件的DOM的所有元素 以上代码的写法为 this.$refs.newForm

2.获取子组件DOM的节点后,然后在通过$refs获取子组件里面的表单ref属性的DOM节点   最后 代码的写法为 this.$refs.newForm.$refs.refForm。

这样就获取了子组件里面表单的DOM节点,便可以对子组件表单进行操作。如清空表单验证的操作等

 

注:clearValidate()的方法必须在element-ui 2.0以上

转载于:https://www.cnblogs.com/linchen1300/p/10219675.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值