封装子组件后,如何从父组件中调用子组件的 ref 方法?

封装子组件后,如何从父组件中调用子组件的 ref 方法?

子组件 ref 方法在父组件中的妙用

在 element ui 中,使用子组件的 ref 方法可以访问子组件实例。但是,当子组件被封装起来的时候,如何从父组件调用子组件的 ref 方法呢?

封装子组件

以下代码展示了封装好的子组件:

<template><el-form :model="formmodel" ref="formref" :rules="formrules" :label-width="formdata.labelwidth"><el-form-item :label="item.label" :prop="item.prop" v-for="(item, k) in formdata.items" :key="k"><!-- 输入框或文本域 --><!-- 其他表单元素(省略) --></el-form-item></el-form></template><script>
export default {
  name: 'eform',
  props: {
    formdata: {
      type: object,
      required: true,
      default: () => {}
    },
    formmodel: {
      type: object,
      required: true,
      default: () => {}
    },
    formrules: {
      type: object,
      required: false,
      default: () => {}
    }
  },
  methods: {
    childmethod() {
      this.$refs['formref'].resetfields()
    },
    validateformitem() {
      this.$refs['formref'].validate(valid => {
        this.$emit('validateform', valid, this._props.formmodel)
      })
    }
  }
}
</script>

父组件调用子组件 ref 方法

在父组件中,你可以通过以下方式访问子组件实例:

<template><!-- 子组件 --><e-form ref="form"></e-form></template><script>
export default {
  methods: {
    // 直接调用子组件 ref 方法
    resetform() {
      this.$refs.form.$refs['formref'].resetfields()
    }
  }
}
</script>

或者,你可以先定义一个中间变量:

<script>
export default {
  mounted() {
    const form = this.$refs.form
    // 通过中间变量调用子组件 ref 方法
    form.$refs['formRef'].resetFields()
  }
}
</script>

解决问题

问题中的情况下,你在子组件的 mounted 钩子中尝试直接调用 ref 方法,这是不会生效的。正确的做法是在 methods 中定义一个重置表单的函数,并通过它来调用 ref 方法。

以上就是封装子组件后,如何从父组件中调用子组件的 ref 方法?的详细内容,更多请关注其它相关文章!