我的目标是,当点击按钮时,按钮被隐藏,相应的输入被显示并 * 聚焦 *。
let tagIdBeingEdited = ref(0)
let buttons = ref([])
let inputs = ref([])
async function toggleTagInput(id:number, index:number ) {
tagIdBeingEdited.value = id
//this does not work
let a = inputs.value[index] as HTMLInputElement
nextTick()
a.focus()
}
<div v-for="tag,index in props.tags" :key="tag.id">
<button v-show="tagIdBeingEdited !== tag.id"
@click="toggleTagInput(tag.id,index)"
ref="buttons">{{tag.name}}</button>
<input v-show="tagIdBeingEdited == tag.id" //show input
@keyup.enter="changeTagName" //change data
@keydown.esc="tagIdBeingEdited=0" //hide input
ref="inputs"
字符串
如果我尝试inputs.value[index].focus()
Typescript说Property 'focus' does not exist on type 'never'
我花了几个小时在这上面,我应该使用document.getElementById(“).focus()吗?
1条答案
按热度按时间zsbz8rwp1#
你的代码只是在
nextTick
之前缺少了一个await
,这是一个异步函数。字符串
我猜
inputs.value[index].focus()
是单独尝试的,因为它不是你的代码片段的一部分?在你有机会转换它之前,TypeScript不知道inputs.value[index]
是什么类型。只要保持你的代码就像你在你的代码片段中一样,你先转换 * 然后 * 你聚焦。或者,您可以在首次定义
inputs
时提供它的类型信息。型
那么
inputs.value[index].focus()
就可以正常工作了。Vue Playground示例