Vue2和Vue3在v-for遍历时ref获取dom节点的区别及说明

Vue2和Vue3在v-for遍历时ref获取dom节点的区别主要体现在template的使用方式上。下面我将详细介绍Vue2和Vue3在使用v-for遍历时ref获取dom节点的不同之处:

Vue2中v-for遍历时ref获取dom节点

在Vue2中我们可以使用Vue提供的特殊属性:ref 来获取dom节点。在使用v-for遍历时,我们可以将ref放在循环元素上来获取对应元素的引用。具体实现方式如下所示:

<template>
  <div>
      <div v-for="(item, index) in list" :key="index" :ref="'item'+index">{{$index+1}}、{{item}}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      list: ['列表1','列表2','列表3']
    }
  },
  mounted() {
    for (let i = 0; i < this.list.length; i++) {
      console.log(this.$refs['item'+i][0].innerText);
    }
  }
}
</script>

在Vue2中,我们需要将ref绑定在循环元素中,同时要注意绑定时要加上冒号。我们可以在mounted函数中遍历整个数组,并通过this.$refs['item'+i][0]来获取对应的dom节点。

Vue3中v-for遍历时ref获取dom节点

在Vue3中,由于template标签已经失效,我们需要使用另外一种方式来获取dom节点引用,那就是使用v-for指令的ref标识符。具体实现方式如下所示:

<template>
  <div>
    <div v-for="(item, index) in list" :key="index" v-ref:item>{{$index+1}}、{{item}}</div>
  </div>
</template>

<script>
import { ref, onMounted } from 'vue'
export default {
  setup() {
    const list = ref(['列表1','列表2','列表3'])

    onMounted(() => {
      for (let i = 0; i < list.value.length; i++) {
        console.log('item'+i+':'+document.getElementById('item'+i).innerText);
      }
    })

    return {
      list
    }
  }
}
</script>

在Vue3中,我们需要将ref绑定在循环元素中,同时在绑定时不需要加上冒号。在mounted改为了onMountedthis.$refs改为了使用document.getElementById来获取dom节点。同时使用vue的ref函数来定义数组。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue2和Vue3在v-for遍历时ref获取dom节点的区别及说明 - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • vue利用openlayers实现动态轨迹

    “vue利用openlayers实现动态轨迹”的实现过程中,需要安装openlayers、esri-leaflet等相关库,而vue可以利用npm进行安装,具体步骤如下: 安装依赖库 npm install ol esri-leaflet –save 在Vue中引入openlayers和esri-leaflet import ‘ol/ol.css’ imp…

    Vue 2023年5月28日
    00
  • vue+ts下对axios的封装实现

    下面就详细讲解“vue+ts下对axios的封装实现”的完整攻略: 一、安装Axios 首先,在项目根目录下执行以下命令安装axios和@types/axios: npm install axios @types/axios –save 安装完成后,在vue项目中引入axios: import Axios from ‘axios’; 二、创建axios实例…

    Vue 2023年5月28日
    00
  • vue数据对象length属性未定义问题

    当使用Vue框架进行开发时,我们有时候会遇到Vue数据对象的length属性未定义的问题。当访问一个数组类型的数据对象的length属性时,比如myArray.length,控制台会报出“Cannot read property ‘length’ of undefined”错误。 这通常是因为在访问Vue数据对象的length属性之前,数据对象还未初始化,数…

    Vue 2023年5月28日
    00
  • Vue.js样式动态绑定实现小结

    当我们在使用Vue.js开发网页时,我们通常会遇到需要根据某些状态来动态改变DOM元素的样式的情况。Vue.js提供了一种便捷的方式帮助我们实现这个功能——绑定动态样式。 绑定动态样式的具体实现方式是使用v-bind指令,它可以绑定到任何DOM元素的style属性上。v-bind需要接受一个熟悉的JavaScript对象,用于描述要绑定的一组CSS属性和它们…

    Vue 2023年5月27日
    00
  • 原生JS改变透明度实现轮播效果

    好的!原生JS改变透明度实现轮播效果的攻略如下: 一、准备工作 在HTML文件中创建一个包含图片的轮播容器,如下所示: <div class="slider"> <img src="./image1.jpg" alt="image1"> <img src=".…

    Vue 2023年5月28日
    00
  • vue使用vue-video-player插件播放视频的步骤讲解

    好的!下面我将为你详细讲解如何使用vue-video-player插件在Vue项目中播放视频的步骤。 1. 安装vue-video-player插件 在终端输入以下命令安装vue-video-player插件: npm install vue-video-player –save 2. 引入vue-video-player组件 在Vue项目的main.js…

    Vue 2023年5月28日
    00
  • Vue实现文件批量打包压缩下载

    讲解”Vue实现文件批量打包压缩下载”的完整攻略。 一、问题描述 在Vue项目中,我们有时需要将多个文件打包成一个压缩文件并提供下载。那么如何使用Vue来实现这个需求呢? 二、解决方案 我们可以使用JSZip和FileSaver.js这两个库来实现此功能。 2.1 安装依赖 首先需要安装的是 jszip 和 file-saver: npm install j…

    Vue 2023年5月28日
    00
  • 纯JS如何实现vue.js下的双向绑定功能

    实现Vue.js下的双向绑定可以分为两个步骤:利用Object.defineProperty监听数据对象的变化,以及利用事件机制实现模板更新。 监听数据对象变化 在JavaScript中可以通过Object.defineProperty方法来监听对象属性的变化。我们可以利用这一特性来监听数据的变化并触发对应的更新操作。 下面是一个简单的例子: let dat…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部