vue获取不到组件模板引用

可能的原因

所绑定的组件位于v-for内,而不是直接循环组件。例如:

<div v-for="type in quarterWorksGroupByType" :key="type.typeID">
<div class="work-table-title">
<!-- code.. -->
</div>
<!-- 期望tableRefs是一个组件实例数组,但实际上获得的是null。因为没有在这个标签上写v-for,vue不会特殊处理 -->
<quarter-work-table
:ref="tableRefs"
v-model:works="type.workViews"
/>
</div>

再回顾下官方文档即可发现,实例中是v-for了li,并在li上使用了ref属性:

当 ref 在 v-for 内部使用时,相应的 ref 应包含一个 Array 值,该值将在 mount 之后填充元素:

<script setup>
import { ref, useTemplateRef, onMounted } from 'vue'
const list = ref([
/* ... */
])
// Declare array for the dynamic collection of refs
// CHANGED: The variable name can differ from the value of the Template element's ref attribute. ---> in my example itemRefs custom-name related to ref="items"
const itemRefs = useTemplateRef('items')
onMounted(() => console.log(itemRefs.value))
</script>
<template>
<ul>
<li v-for="item in list" ref="items">
{{ item }}
</li>
</ul>
</template>

来源:v-for内的引用

解决方案

方法一:将v-for下放到与绑定了ref属性的组件/标签内

<quarter-work-table
v-for="type in types" :key="type.typeID"
:ref="tableRefs"
v-model:works="type.workViews"
/>

方法二:为ref绑定函数,自行维护ref数组

<script setup>
import { reactive } from 'vue'
const dynamicName = "inputDynamicRefName"
const inputs = reactive({})
const setTemplateRef = (key, el) => {
inputs[key] = el
}
</script>
<template>
<div>
<input :ref="(el) => setTemplateRef(dynamicName, el)" />
</div>
</template>

参考:函数模板引用

posted @   南山有榛  阅读(110)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示