// 参考网址:https://cn.vuejs.org/guide/essentials/template-refs.html#ref-on-component
// https://cn.vuejs.org/guide/essentials/template-refs.html
// 模板引用也可以被用在一个子组件上。这种情况下引用中获得的值是组件实例:
// 如果一个子组件使用的是选项式 API 或没有使用 <script setup>,被引用的组件实例和该子组件的 this 完全一致,
// 这意味着父组件对子组件的每一个属性和方法都有完全的访问权。
// 这使得在父组件和子组件之间创建紧密耦合的实现细节变得很容易,当然也因此,应该只在绝对需要时才使用组件引用。
// 大多数情况下,你应该首先使用标准的 props 和 emit 接口来实现父子组件交互。
// 有一个例外的情况,使用了 <script setup> 的组件是默认私有的:一个父组件无法访问到一个使用了 <script setup> 的子组件中的任何东西,
// 除非子组件在其中通过 defineExpose 宏显式暴露。
<!-- 模板引用 --> <template> <input id="txtName" ref="txtName" value="jay.star"> <el-button type="primary" @click="ShowName()">click</el-button> </template> <script setup> import { reactive, ref, getCurrentInstance, onMounted, computed, toRefs, watch, watchEffect, watchPostEffect, onUpdated, onUnmounted } from "vue"; // 声明一个 ref 来存放该元素的引用 // 必须和模板里的 ref 同名 const txtName = ref(null); // 模板引用,根据引用对象获取值。 function ShowName(){ let ctlId = txtName.value.id; let name = document.getElementById(ctlId).value; alert(name); } // 只可以在组件挂载后才能访问模板引用 onMounted(() => { //txtName.value.focus() }); // 如果你需要侦听一个模板引用 ref 的变化,确保考虑到其值为 null 的情况: watchEffect(() => { if (txtName.value) { console.log("组件已挂载"); txtName.value.focus(); } else { console.log("此时还未挂载,或此元素已经被卸载(例如通过 v-if 控制)"); } }) </script>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】