【问题标题】:Vue Composition Api - call child component's method which uses render functionVue Composition Api - 调用使用渲染功能的子组件的方法
【发布时间】:2021-11-12 11:51:53
【问题描述】:

我在 Vue2 中使用 Vue composition-api。
当我尝试使用父组件的渲染函数调用组件的方法时遇到了问题。

不带渲染功能也可以。

模板组件.vue

<template>
...
</template>
<script lang="ts">
import { defineComponent } from '@vue/composition-api'

export default defineComponent({
  setup (props, context) {
    const doSomething = () => {
      console.log('doSomething')
    }
    return {
      // publish doSomething method.
      doSomething
    }
  }
})
</script>

所以,父组件可以这样调用 TemplateComponent 的方法。

TopPage.vue

<template>
  <TemplateComponent ref="componentRef" />
</template>
<script lang="ts">
import { defineComponent, ref, onMounted } from '@vue/composition-api'
import TemplateComponent from '@/components/TemplateComponent.vue'

export default defineComponent({
  components: { TemplateComponent },
  setup (props, context) {
    const componentRef = ref()
    onMounted(() => {
      componentRef.value.doSomething()
    })
  }
})
</script>

使用渲染功能,我找不到调用方法的方法。

RenderComponent.vue

<script lang="ts">
import { defineComponent, h } from '@vue/composition-api'

export default defineComponent({
  components: { TemplateComponent  },
  setup (props, context) {
    const doSomething = () => {
      console.log('doSomething')
    }
    // setup method should return render function.
    return () => h('div', 'Hello world!!')
  }
})
</script>

当使用组合api声明渲染函数时,我们应该在setup方法中返回渲染函数。 https://v3.vuejs.org/guide/composition-api-setup.html#usage-with-render-functions

在这种情况下,我不明白如何发布 doSomething 方法。
有没有办法解决这个问题?

【问题讨论】:

    标签: javascript vue.js


    【解决方案1】:

    expose context method 的存在是为了在setup 中结合渲染函数和公共实例方法:

    context.expose({ doSomething })
    return () => ...
    

    【讨论】:

    • 谢谢!它记录在下面。
    猜你喜欢
    • 2020-05-06
    • 2021-04-06
    • 1970-01-01
    • 2020-05-13
    • 2021-06-01
    • 2017-03-26
    • 2017-09-28
    • 2021-10-25
    • 1970-01-01
    相关资源
    最近更新 更多