useTemplateRef使用
1、使用ref方式:
注意ref属性接收的不是一个ref变量,而是ref变量的名称。
<template>
<div>
<input type="text" ref="inputEl" />
<button @click="setInputValue">给input赋值</button>
</div>
</template>
<script lang="ts" setup>
import { ref } from "vue";
const inputEl = ref<HTMLInputElement>();
function setInputValue() {
if (inputEl.value) {
inputEl.value.value = "Hello, world!";
}
}
</script>
2、使用useTemplateRef方式
在Vue3.5中新增了一个 useTemplateRef
函数。
useTemplateRef
函数的用法很简单:只接收一个参数 key
,是一个字符串。返回值是一个ref变量。
其中参数key字符串的值应该等于template中ref属性的值。
返回值是一个ref变量,变量的值指向模版引用的DOM元素或者子组件。
<template>
<input type="text" ref="inputRef" />
<button @click="setInputValue">给input赋值</button>
</template>
<script setup lang="ts">
import { useTemplateRef } from "vue";
const inputEl = useTemplateRef<HTMLInputElement>("inputRef");
function setInputValue() {
if (inputEl.value) {
inputEl.value.value = "Hello, world!";
}
}
</script>
3、使用useTemplateRef的应用:动态切换ref绑定的变量
在这个场景template中ref绑定的就是一个变量 refKey
,通过点击 切换ref绑定的变量
按钮可以切换 refKey
的值。相应的,绑定input输入框的变量也会从 inputEl1
变量切换成 inputEl2
变量。
<template>
<input type="text" :value="refKey" />
<input type="text" ref="inputEl1" />
<input type="text" ref="inputEl2" />
<button @click="switchRef">切换ref绑定的变量</button>
<button @click="setInputValue">给input赋值</button>
</template>
<script setup lang="ts">
import { useTemplateRef, ref } from "vue";
const refKey = ref("inputEl1");
const inputEl1 = useTemplateRef<HTMLInputElement>("inputEl1");
const inputEl2 = useTemplateRef<HTMLInputElement>("inputEl2");
function switchRef() {
refKey.value = refKey.value === "inputEl1" ? "inputEl2" : "inputEl1";
}
function setInputValue() {
const curEl = refKey.value === "inputEl1" ? inputEl1 : inputEl2;
if (curEl.value) {
curEl.value.value = "Hello, world!";
}
}
</script>
posted on 2024-09-26 09:11 springsnow 阅读(189) 评论(0) 编辑 收藏 举报