#typescript #vue.js #vue-component #vuejs3 #vue-render-function
Вопрос:
Я хочу вызвать методы дочернего компонента в родительском файле, и дочерний компонент создается функцией визуализации. ниже приведен мой код
ребенок.тс
export default {
setup(props) {
//...
const getCropper = () => {
return cropper
}
return () =>
// render function
h('div', { style: props.containerStyle }, [
])
}
родитель.ts
<template>
<child-node ref="child"></child-node>
</template>
<script>
export default defineComponent({
setup(){
const child =ref(null)
// call child method
child.value?.getCropper()
return { child }
}
})
</script>
Комментарии:
1. Я не уверен, что есть удобный для TS способ сделать это. Подумайте о том, чтобы открыть проблему.
2. @EstusFlask Спасибо вам за ваши предложения. Я постараюсь это сделать.
3. Я опубликовал, как это можно сделать сейчас, но afaik Vue не будет обрабатывать типы для вас.
Ответ №1:
Экземпляр компонента может быть расширен с помощью expose
, это полезно для случаев, когда setup
возвращаемое значение уже является функцией визуализации:
type ChildPublicInstance = { getCropper(): void }
...
setup(props: {}, context: SetupContext) {
...
const instance: ChildPublicInstance = { getCropper };
context.expose(instance);
return () => ...
}
Экземпляр, предоставленный expose
пользователем, небезопасен для ввода и должен быть набран вручную, например:
const child = ref<ComponentPublicInstance<{}, ChildPublicInstance>>();
child.value?.getCropper()