# 1.ref模板绑定
- 定义一个ref响应式对象。
- 在元素上通过
ref
绑定给ref对象的响应式属性。
const input = ref<HTMLInputElement | null>(null);
onMounted(() => {
input.value?.focus() //钩子函数中,使用需要?来判断不为null才使用
})
<input ref="input">
1
2
3
4
5
6
2
3
4
5
6
执行的顺序是:
- 首先创建一个ref对象。
- 由于setup函数执行的时候,dom元素还没挂载,此时的值为null。
- 此时生命周期函数onMounted中,此时DOM已经挂载,会解析ref指令,将DOM元素注入到响应式属性中去。
# 2. 给组件绑定ref
有时,你可能需要为一个子组件添加一个模板 ref,以便调用它公开的方法。
为了获取组件的类型,我们首先需要通过
typeof
得到其类型,再使用 TypeScript 内置的InstanceType
工具类型来获取其实例类型:
import HelloWorld from './components/HelloWorld.vue'
const ref1 = ref<InstanceType<typeof HelloWorld> | null>(null);
<hello-world ref="ref1" :age="20" name="cat"></hello-world>
1
2
3
2
3
注意:必须是子组件通过defineExpose
暴露得方法和属性才能获取和调用。
子组件:
function getSst() {
console.log("子组件方法");
}
const person: Person = reactive({
age: 0,
name: ""
})
defineExpose({
getSst,
person
})
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
调用:
onMounted(() => {
ref1.value.getSst()
console.log(ref1.value.person);
})
1
2
3
4
2
3
4