Vue3如何动态设置ref
更新时间:2024年12月26日 08:56:52 作者:-小龙人
文章介绍了在某些场景下,需要根据动态数据来设置ref,例如在表格中的输入框需要聚焦时,需要为每个输入框设置一个ref,通过点击编辑按钮,可以自动聚焦到相应的输入框中
Vue3动态设置ref
介绍
在一些场景,ref设置是未知的需要根据动态数据来决定,如表格中的input框需要我们主动聚焦,就需要给每一个input设置一个ref,进而进行聚焦操作。
Demo
点击下面截图中的编辑按钮,自动聚焦到相应的输入框中。
<template> <!-- 动态ref --> <div class="test_ref"> <div v-for="item in 9" :key="item"> <span>{{ item }}</span> <!-- 动态设置ref --> <el-input v-model="inputVal" placeholder="Please input" :ref="(el:refItem) => handleSetInputMap(el, item)" /> <el-button type="primary" :icon="Edit" @click="handleEdit(item)" /> </div> </div> </template>
<script lang="ts" setup> import { ref } from "vue"; import { Edit } from "@element-plus/icons-vue"; import { ComponentPublicInstance } from "vue"; type refItem = Element | ComponentPublicInstance | null; const inputVal = ref(); const inputRefMap = ref({}); /** 编辑 */ const handleEdit = (item: number) => { // 若输入框此时还没有渲染出来,如先隐藏再触发显示 需要使用nextTick进行聚焦 inputRefMap.value[`Input_Ref_${item}`].input.focus(); }; /** 动态设置Input Ref */ const handleSetInputMap = (el: refItem, item: number) => { if (el) { inputRefMap.value[`Input_Ref_${item}`] = el; } }; </script>
<style lang="scss" scoped> .test_ref { padding: 50px; > div { width: 300px; margin: 0 auto; display: flex; justify-content: center; align-items: center; gap: 20px; margin-bottom: 10px; } } </style>
效果
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
使用vuex的时候,出现this.$store为undefined问题
这篇文章主要介绍了使用vuex的时候,出现this.$store为undefined问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-06-06你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
这篇文章主要介绍了你不知道的Vue技巧之--开发一个可以通过方法调用的组件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-04-04
最新评论