vue 在for循环中设置ref并获取$refs

news2025/1/21 12:12:31

一、单循环动态设置ref

1.设置:【:ref=“‘XXX’ + index”】XXX -->自定义ref的名字

2.获取:let ref = eval(‘this.$refs.XXX’ + index)[0]

3.示例:
在这里插入图片描述
代码如下所示

<template>
    <div class="ref_test">
        <div v-for="(item, index) in dataList" :key="index" :ref="'refName' + index" @click="clickGetRef(index)">
            <p>{{ item.title }}</p>
        </div>
    </div>
</template>

<script>
export default {
    data() {
        return {
            dataList: [
                {
                    "id": 1,
                    "title": "这是来测试如何获取动态ref的"
                },
                {
                    "id": 2,
                    "title": "第2条数据"
                },
                {
                    "id": 3,
                    "title": "第3条数据"
                },
                {
                    "id": 4,
                    "title": "第4条数据"
                },
            
            ]
        }
    },
    methods: {
        clickGetRef(index) {
            let ref = eval('this.$refs.refName' + index)[0]
            console.log(ref);
        }
    },
}
</script>

<style></style>

二、双循环动态设置ref

1.设置:【:ref=“‘XXX’ + (index+i)”】或者【:ref=“‘XXX’ + id”】
index+i -->两个for循环的索引;
id -->item的唯一标识;

2.获取:

let ref = eval('this.$refs.XXX' + (index + i))[0]
或者
let ref = eval('this.$refs.XXX' + (item.id))[0]

3.示例:
在这里插入图片描述
代码如下所示

<template>
    <div>
        <div class="ref_double_test">
            <div v-for="(item, index) in dataLists" :key="index">
                <div class="content" v-for="(sonItem, i) in item.sonList" :key="index + i" @click="clickGetDoubleRef(index, i, sonItem)">
                    <!-- 方式一:用索引的方式,用一个索引可能会重复,为防止重复,则用两个索引【index + i】 -->
                    <div :ref="'refName1' + (index + i)">{{ item.title }}</div> ----
                    <!-- 方式二:用id的方式 -->
                    <div :ref="'refName2' + sonItem.sonId">{{ sonItem.sonContent }}</div>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
export default {
    data() {
        return {
            dataLists: [
                {
                    "id": 1,
                    "title": "第1条数据",
                    "sonList": [
                        { "sonId": 1, "sonContent": "子集第1条数据" },
                        { "sonId": 2, "sonContent": "子集第2条数据" },
                    ]
                },
                {
                    "id": 2,
                    "title": "第2条数据",
                    "sonList": [
                        { "sonId": 11, "sonContent": "子集第11条数据" },
                        { "sonId": 22, "sonContent": "子集第22条数据" },
                    ]
                },
                {
                    "id": 3,
                    "title": "第3条数据",
                    "sonList": [
                        { "sonId": 111, "sonContent": "子集第111条数据" },
                        { "sonId": 222, "sonContent": "子集第222条数据" },
                    ]
                }
            ]
        }
    },
    methods: {
        clickGetDoubleRef(index, i, sonItem) {
            // 方式一
            let ref1 = eval('this.$refs.refName1' + (index + i))[0]
            console.log('ref1', ref1);

            // 方式二
            let ref2 = eval('this.$refs.refName2' + sonItem.sonId)[0]
            console.log('ref2', ref2);
        }
    },
}
</script>

<style>
.ref_test {
    width: 500px;
    height: 100px;
    border: 1px solid gray;
}
.content {
    width: 500px;
    height: 30px;
    display: flex;
    background: rebeccapurple;
    margin-bottom: 10px;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/408566.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常用的几种布局方式---Flex 布局(垂直居中展示)

常用的几种布局方式---Flex 布局(垂直居中展示&#xff09; 前言一、默认使用静态布局二、flex布局1.父元素container1.1.display:flex1.2.flex-direction属性1.3.主轴与侧轴1.4.justify-content属性1.5.align-items属性1.6.flex-wrap属性2.子元素items 前言 怎样让一个元素在…

Vue2 概述

什么是Vue 引用官网的一段话:Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项…

如何统计前端项目有多少行代码

方法一&#xff1a;输入命令 前端项目核心代码主要在src目录下&#xff0c;打开项目找到src目录&#xff0c;右键点击 git bash here &#xff0c;然后输入命令&#xff1a; 1.包括空行&#xff08;会列出每个文件的代码行数&#xff09;&#xff1a; find . "(" …

Vue注册组件的几种方式,你都知道吗?

在开发中,经常需要将业务进行组件化,我们就需要去注册组件,下面列举几种常用的注册组件的方法 局部注册组件 1.首先需要将要注册的组件进行引入 2.在script标签中进行注册,注意:组件注册的名字和引入的名字需要保持一致即可进行简写 3.在template标签中以html的标签格式进行使…

web前端面试高频考点——Vue的高级特性(动态组件、异步加载、keep-alive、mixin、Vuex、Vue-Router)

系列文章目录 内容参考链接Vue基本使用Vue的基本使用&#xff08;一文掌握Vue最基础的知识点&#xff09;Vue通信和高级特性Vue组件间的通信及高级特性&#xff08;多种组件间的通信、自定义v-model、nextTick、插槽&#xff09;Vue高级特性Vue的高级特性&#xff08;动态组件…

Vue 进阶系列丨大文件切片上传

Vue 进阶系列教程将在本号持续发布&#xff0c;一起查漏补缺学个痛快&#xff01;若您有遇到其它相关问题&#xff0c;非常欢迎在评论中留言讨论&#xff0c;达到帮助更多人的目的。若感本文对您有所帮助请点个赞吧&#xff01;2013年7月28日&#xff0c;尤雨溪第一次在 GItHub…

Layui的基本使用(前端登录操作步骤)

目录 一.介绍layui 二.Layui相关的基本操作 1.下载Layui网站 &#xff1a;Layui - 经典开源模块化前端 UI 框架 ----------接下来的操作是实现一个Layui前端登录的效果------------- 2.创建项目 3.使用mybatis plus自动生成代码 (1).导入依赖 (2).导入生成类 (3).运行…

vscode+live server——更改端口号——基础积累

最近在写前台&#xff0c;通过jq写的&#xff0c;之前我一直嚷嚷jq基础薄弱&#xff0c;现在练手的来了。。。。 运行页面的时候&#xff0c;可以使用live server 1.vscode软件中安装live server 2.在html页面右击&#xff0c;有个open with live server 3.电脑默认的浏览器会…

Vue3中使用hooks,hooks究竟是个啥?如何理解

1.前言 最近被hooks这个词老是被提出&#xff0c;我经常听到但是又不会用&#xff0c;于是乎抽时间认真学习一下。 2.vue3 hooks 2.1 为什么vue3 可以使用hooks 因为vue2由选项式Api转为组合式Api。底层源码改了好多。 组合式API的好处&#xff1b; 就是在函数内可以使用声…

使用pynecone开发python web应用

环境•windows 10 64bit•python 3.8.15•pynecone 0.1.14简介Pynecone 是一个基于纯 python 的用于开发 web app 的开源框架&#xff0c;它依赖于 nodejs&#xff0c;不过不需要另外编写前端代码&#xff0c;这对于没有接触过前端的朋友是非常友好的。安装第一步&#xff0c;安…

Vue项目常见的错误以及解决办法

错误分类 vue项目中遇到的问题大体上分为两类&#xff1a;一类是基础的语法错误&#xff0c;另一类就是其它错误 这里简单分享以下我在项目中遇到的错误和解决办法&#xff0c;如果你也有&#xff0c;希望对你会有帮助 GET http://dida100.com:8888/api/cart 401 (Unauthoriz…

【前端修炼场】 — HTML常用的标志语言

此文为【前端修炼场】第三篇&#xff0c;上一篇文章链接&#xff1a;上一篇 文章目录前言标志语言基本结构介绍声明介绍标签修饰编码形式常用HTML标签标题标签段落标签换行标识水平线标识加粗标识倾斜标识删除线标识下划线标识上标 / 下标标识总结前言 之前我们使用过的那些标…

React 面向组件编程(上)

目录前言&#xff1a;一、组件的基本理解和使用1. 函数式组件2. 类式组件3. 注意事项4. 渲染函数式组件标签的基本流程5. 渲染类组件标签的基本流程二、组件三大核心属性 1&#xff1a;state1. 代码示例2. 效果展示3. 注意4. 设置状态:setState三、 组件三大核心属性 2&#xf…

小程序问题:封装公共组件的onLoad方法不生效

素材编辑 | 宋大狮 排版运营 | 小唐狮 ONE 问题描述 因为许久没有接触小程序项目&#xff0c;今天在做小程序项目时&#xff0c;为了节省时间&#xff0c;将要修改的页面组件直接拿出来封装成了公共组件&#xff0c;同时也没多想就直接使用了。于是就出现了页面数据不能加载的…

模板字符串基本使用

模板字符串是ES6添加的一个新的字符串编写形式。 1.【模板字符串】之拼接 在ES6之前&#xff0c;如果我们想要将字符串和一些动态的变量拼接到一起&#xff0c;是很麻烦的。 const name "aaa" const age 18console.log("my name is "name".Im &q…

三个案例掌握this.$nextTick()方法的使用/Vue中的$nextTick()

this.$nextTick() 解释为在下次DOM更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法&#xff0c;获取更新后的DOM. 也就是说&#xff0c;当dom元素发生改变&#xff0c;重新渲染dom树后&#xff0c;再执行vue.$nextTick()里面的内容。 其实用方法一般为 this.$n…

讲讲vue3下会造成响应式丢失的情况

题引&#xff1a; 在我们从vue2过渡到vue3的时候&#xff0c;对于数据响应式的变化其实是懵懵懂懂的。从以往直接在data函数里面定义变量到每一次都要使用ref/reactive时&#xff0c;是有些不适应的。但问题不大&#xff0c;毕竟在大前端时代中&#xff0c;如果不及时跟上时代…

TS中快速定义一个对象数组以及处理async await的异常

定义一个对象数组&#xff08;即数组成员为对象&#xff0c;对象的属性为我们所约束&#xff09; 方法一&#xff1a;接口字面量形式 export type Resource {_id: string,personID: {_id: stringage: stringidentifier: stringname: stringnation: stringgrade: stringscheme…

contentEditable属性

前言 我们最常用的输入文本内容便是input与textarea&#xff0c;但是有一个属性&#xff0c;可以让我们在很多标签中&#xff0c;如div,table,p,span,body等&#xff0c;可以像input输入框一样&#xff0c;实现文本编辑&#xff0c;这便是contentEditable属性 contentEditabl…

【vue2】近期bug收集与整理01

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;记录博主在vue2中遇到过的坑&#xff0c;本文是博主的学习使用总结 目录 1登陆token的问…