【发布时间】:2022-12-13 11:55:55
【问题描述】:
我的父组件有一个子组件调用传递给它的引用:
<child
ref="childRef"
/>
现在我想从父组件运行子组件内部的函数,如下所示:
mounted() {
(this.$refs.childRef as any).testFunction();
}
当然它适用于任何类型,但如何设置正确的类型来运行此功能?
如果我使用组件本身的类型:
(this.$refs.childRef as Child).testFunction();
它仍然说属性 testFunction 在类型“Vue”上不存在。
我使用 Vue.js 的 2 版本。
我的子组件:
@Component({})
export default class Child extends Mixins(CustomMixin) {
testFunction() {
console.log('test');
}
}
编辑: 我还找到了运行该功能的解决方案:
(this.$refs.childRef as Child & { testFunction:() => void }).testFunction();
它使用 testFunction() 方法更新 Child 类型,并且它确实有效。虽然我不知道这是否是一个好方法。
【问题讨论】:
-
它应该工作。
-
最初并未显示 Child 是如何定义的。这非常适合您的情况,它是 vue-class-component 而不是每个组件。因为在你的情况下
Child是一个类,我希望它能工作。 “解决方案”是修复类型问题的 hack,它不是正确的解决方案。您需要添加如何观察问题的详细信息,因为构建时和 IDE 中的 TS 错误是完全不同的事情。考虑提供一种重现它的方法,例如在 Stackblitz 上使用一些 vue+ts 模板
标签: typescript vue.js vuejs2 vue-class-components