vue3 动态获取ref
时间: 2025-02-01 17:40:25 AIGC 浏览: 78
### Vue3 中动态获取 `ref` 引用的方法
在 Vue3 中,通过 `ref()` 创建的响应式引用不仅限于静态定义。对于动态获取多个元素或组件实例的情况,可以采用数组或其他结构存储这些引用。
#### 使用循环绑定 `ref`
当有多个相同类型的元素需要分别赋予 `ref` 时,可以在模板中利用 v-for 循环并结合索引来实现:
```html
<template>
<ul>
<!-- 假设有若干个 li 需要单独操作 -->
<li v-for="(item, index) in items" :key="index" :ref="el => { if (el) divRefs[index] = el }">
{{ item }}
</li>
</ul>
</template>
<script setup>
import { ref, onMounted } from 'vue';
const items = ['Item A', 'Item B', 'Item C'];
let divRefs = [];
onMounted(() => {
// 此处可以直接遍历 divRefs 数组来访问各个 li 元素
console.log(divRefs);
});
</script>
```
上述代码展示了如何在一个列表渲染过程中给每一个 `<li>` 赋予独立的 `ref` 变量[^1]。
#### 动态表单验证案例
针对更复杂的场景比如动态生成的表单项,在提交前统一收集所有子组件完成校验,则可借助组合 API 的灵活性处理:
```html
<template>
<form @submit.prevent="handleSubmit">
<component
v-for="(field, idx) in fields"
:is="resolveComponent(field.type)"
:key="idx"
:rules="field.rules"
class="mb-3"
:ref="el => { forms[idx] = el }"
/>
<button type="submit">Submit</button>
</form>
</template>
<script setup>
import { ref } from 'vue';
// ...其他导入语句...
const fields = [
{type:'input-text', rules:[{required:true}]},
{type:'select-box', rules:[/*...*/]}
];
let forms = [];
async function handleSubmit(){
let isValid = true;
for(const form of forms){
const validResult = await form.validate();
if(!validResult.valid){
isValid=false;
break;
}
}
if(isValid){
alleet('All validations passed!');
}else{
alleet('Please check your inputs.');
}
}
</script>
```
此片段说明了怎样为一组未知数量的自定义表单控件分配各自的 `ref` 并执行批量检验逻辑[^3]。
阅读全文
相关推荐



















