const inputRef = ref<any>()

来源:5-9 ValidateForm 编码第二部分 - 尝试父子通讯

风少_

2021-05-10

图片描述图片描述
如果把上面的 换成 <HTMLElement | null>
怎么获取 input.value.validateInput()

写回答

3回答

张轩

2021-05-14

这里的 validateInput 不是一个 DOM 节点,而是一个 validateInput 组件实例,(因为你的 ref 是加在自定义组件上的,而不是普通的 HTML 上面)所以你声明成 DOM 节点类型是错误的,你可以给他自定义一个实例类型,比如 

interface ValidateInputInstance {
  validateInput: () => boolean;
}
const inputRef = ref<ValidateInputInstance | null>(null)
if (inputRef) {
 // 现在就能获取并联想到正确的类型了
inputRef.value.validateInput()
}


0
1
风少_
非常感谢!
2021-05-14
共1条回复

风少_

提问者

2021-05-14

//img.mukewang.com/szimg/609dcb3f0949a4cb04840099.jpg

//img.mukewang.com/szimg/609dcb3f09b6e05d09290175.jpg
//img.mukewang.com/szimg/609dcd0c09ae83e903030150.jpg

老师你好,因为 inputRef.value 本身就是个 dom 节点,所以我不想用 ref<any> ,而是用上面图一的方式。

但是到了图二就获取不到了,我自己推测的原因是 inputRef.value 是个子组件,而不是简单的 dom 节点,打印 inputRef.value 出来,是个 proxy 代理。

希望图一不变,图二有什么方式获取到 validateInput( ) 这个方法吗?

0
1
张轩
这里的 validateInput 不是一个 DOM 节点,而是一个 validateInput 组件实例,(因为你的 ref 是加在自定义组件上的,而不是普通的 HTML 上面)所以你声明成 DOM 节点类型是错误的,你可以给他自定义一个实例类型,比如 interface ValidateInputInstance { validateInput: () => boolean; } const inputRef = ref(null) if (inputRef) { // 现在就能获取并联想到正确的类型了 inputRef.value.validateInput() }
2021-05-14
共1条回复

张轩

2021-05-11

同学你好  inputRef.value 是个 DOM 节点啊 它上面并没有 validateInput 这个方法啊 这个方法是我们自定义的

0
3
风少_
回复
张轩
老师,麻烦你看一下我的最新提问,谢谢
2021-05-14
共3条回复

Vue3 + TS 仿知乎专栏企业级项目

带你完成前后端分离复杂项目,率先掌握 vue3 造轮子技能

3074 学习 · 2253 问题

查看课程