Vue2函数式编程中如何调子组件方法

发布于 2022-09-12 22:27:43 字数 459 浏览 22 评论 0

题目描述

Vue2函数式编程中如何调子组件方法

题目来源及自己的思路

在函数中编程中,render函数生成了一个组件,需要在响应事件中调用这个组件的一个方法,如代码

相关代码

render(h, c){
  const Btn = h('el-button', {
    on: {
       click: () => {
          // 这里怎么调用el-form的validate方法
       }
    }
  }, '提交')
  // el-form 本身有个方法叫 validate, 
  // 通常用this.$refs.form.validate调用
  const vNode = h('el-form', { ... }, [ ..., Btn ])
  
}

你期待的结果是什么?实际看到的错误信息又是什么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

就像说晚安 2022-09-19 22:27:43

又看见你了哈哈,
不知道你是内部调用还是外部父组件调用,其实都差不多, 下面这个是 render组件调用的

<template>
  <div>
    <my-form :form="form"></my-form>
  </div>
</template>
    
  //... 
  data() {
    return {
      form: {
        username: 'admin'
      }
    }
  },
  components: {
    MyForm: {
      functional: true,
      props: {
        form: {
          type: Object,
          default: function() {
            return {
              username: 'admin'
            }
          }
        }
      },
      render(h, context) {
        const input = h('el-form-item', {
          props: {
            label: '用户名',
            prop: 'username'
          }
        }, [h('el-input', {
          props: {
            value: context.props.form.username
          },
          on: {
            input(value) {
              context.props.form.username = value
            }
          }
        })])
        const Btn = h('el-button', {
          on: {
            click: () => {
              // 这里怎么调用el-form的validate方法
              const refForm = context.parent.$refs.form
              refForm.validate((valid, ret) => {
                console.log(valid, ret)
                if (valid) return
                setTimeout(() => {
                  refForm.clearValidate()
                }, 1000)
              })
              console.log(this, context)
            }
          }
        }, '提交')
        // el-form 本身有个方法叫 validate,
        // 通常用this.$refs.form.validate调用
        return h('el-form', {
          ref: 'form',
          props: {
            model: context.props.form,
            rules: {
              username: {
                required: true,
                message: '请输入用户名',
                trigger: 'blur'
              }
            }
          }
        }, [input, Btn])
      }
    }
  },
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文