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>
参考:函数模板引用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?