vue - 动态绑定ref(使用变量)以及获取方式,解决v-for循环嵌套自定义子组件时无法this.$refs.xx找到动态组件的情况(详细示例教程)适合 vue.js nuxt.js uniapp

本文介绍了在Vue中如何动态绑定ref,并在v-for循环中解决无法通过this.$refs找到特定子组件的问题。通过示例代码详细展示了在遇到v-for双层嵌套循环时,如何利用动态id避免ref重复,以及如何在父组件中正确调用每个独立的子组件方法。

介绍

正常情况,我们需要在vue中获得某个dom或者组件,我们会通过绑定 ref 然后通过绑定后的名字来获取这个dom 。

但是,如果我们在v-for中绑定ref的话,那么这个ref就会存在多个,比如我们点击事件让对应的显示/隐藏的话,我们很难找到这个对应的元素。

那么,这时我们需要动态绑定不一样的ref(比如 Arr1、Arr2、Arr3这种),那么我们如何实现呢?

实现代码

注释详细,一眼就能看出如何解决这个问题。

以下示例无依赖,可直接在 vue 环境中运行查看。

页面:

<templa
Vue 2 中,使用 `this.$refs` 可以方便地获取子组件实例并调用其方法。而在 Vue 3 + TypeScript 中,由于组合式 API 的引入,获取组件方法的方式有所不同。 在 Vue 3 + TypeScript 里,若要获取组件方法,可借助 `ref` 和 `defineComponent` 等组合式 API。以下是具体示例: 父组件: ```vue <template> <div> <ChildComponent ref="childRef" /> <button @click="callChildMethod">调用子组件方法</button> </div> </template> <script lang="ts"> import { defineComponent, ref } from 'vue'; import ChildComponent from './ChildComponent.vue'; export default defineComponent({ components: { ChildComponent }, setup() { const childRef = ref<InstanceType<typeof ChildComponent> | null>(null); const callChildMethod = () => { if (childRef.value) { childRef.value.childMethod(); } }; return { childRef, callChildMethod }; } }); </script> ``` 子组件: ```vue <template> <div>子组件</div> </template> <script lang="ts"> import { defineComponent } from 'vue'; export default defineComponent({ methods: { childMethod() { console.log('子组件方法被调用'); } } }); </script> ``` 在上述代码中,父组件利用 `ref` 创建了一个引用变量 `childRef`,并将其绑定到子组件上。在 `setup` 函数里,可通过 `childRef.value` 访问子组件实例,进而调用子组件的方法。同,为了避免类型错误,使用 `InstanceType<typeof ChildComponent>` 明确了 `childRef` 的类型。 若使用 `this.$refs` 遇到类型提示问题,可对 `$refs` 进行类型扩展。示例如下: ```vue <script lang="ts"> import Vue from 'vue'; import Component from 'vue-class-component'; @Component export default class InputFocus extends Vue { // annotate refs type. // The symbol `!` (definite assignment assertion) // is needed to get rid of compilation error. $refs!: { input: HTMLInputElement }; mounted() { // Use `input` ref without type cast. this.$refs.input.focus(); } } </script> ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝猫叫十一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值