关于vue中ref的使用(this.$refs获取为undefined)

“关于vue中ref的使用(this.$refs获取为undefined)”这个问题,主要是由于vue的生命周期引起的。在组件的生命周期函数created()回调函数中是无法访问到DOM元素上的ref属性的,当然通过$refs也是无法获取到。因为这个时候组件还未被渲染出来,也就是所使用的DOM元素还不存在。所以,在组件的生命周期函数mounted()回调函数中才可以获取到DOM元素和相应的ref属性。

以下是两条示例说明:

示例1. 纯粹基础案例

template模板代码

<template>
  <div>
    <h3>示例1</h3>
    <div ref="box" class="box">
      这是一个盒子
    </div>
    <p>
      <button @click="changeHandler">改变颜色</button>
    </p>
  </div>
</template>

JavaScript脚本代码

export default {
  methods: {
    changeHandler() {
      let box = this.$refs.box
      console.log(box)
      box.style.backgroundColor = 'red'
    },
  },
}

通过点击“改变颜色”按钮,将会获取到我们的DOM及相应的ref属性,并修改它的背景颜色。

示例2. 带有v-if的组件

template模板代码

<template>
  <div>
    <h3>示例2</h3>
    <div v-if="show" ref="box" class="box">
      这是一个盒子
    </div>
    <p>
      <button @click="show = !show">显示/隐藏</button>
    </p>
  </div>
</template>

JavaScript脚本代码

export default {
  data() {
    return {
      show: true,
    }
  },
  methods: {
    showHandler() {
      let box = this.$refs.box
      console.log(box)
    },
  },
}

通过切换“显示/隐藏”按钮,将会显示或隐藏DOM及相应的ref属性,并获取它的值(hidden状态下无法获取DOM)。注意:因为切换的顺序,这里需要排除this.$refs.box获取为undefined的情况。

综上所述,正确使用$refs应该是在组件的mounted()回调函数中调用。如果是使用了v-if的组件,需要额外注意组件是否已经渲染。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于vue中ref的使用(this.$refs获取为undefined) - Python技术站

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

相关文章

  • 关于vue中如何监听数组变化

    在Vue中,如何监听数组变化,可以通过Vue提供的一些方法或者使用第三方库来实现。下面是几种常用的方法。 使用Vue提供的$watch和$set方法 Vue提供了$watch和$set方法来监听数组的变化。 $watch $watch可以监听数组的长度变化、数组中某个元素的值的变化以及数组中元素的增删变化。下面是一个示例: // 定义一个数组 let ite…

    Vue 2023年5月28日
    00
  • Vue中的同步和异步调用顺序详解

    Vue中的同步和异步调用顺序详解 前言 在Vue的开发过程中,同步和异步调用顺序经常是我们需要关注的问题。本篇文章主要讲解同步和异步调用的概念,并通过示例来详细说明Vue中同步和异步调用的顺序。 同步和异步调用的概念 在JavaScript中,同步调用是指函数按照代码的顺序依次执行,执行完一个函数后才能执行下一个函数。异步调用则是指函数不按照代码的顺序执行,…

    Vue 2023年5月28日
    00
  • vue实现裁切图片同时实现放大、缩小、旋转功能

    实现裁切图片、放大、缩小、旋转等功能的方法涉及多个部分,包括使用vue、Canvas API以及一些库和插件。下面是一个基本的完整攻略: 步骤1:安装和配置所需的库和插件 我们需要安装vue-cropperjs和cropperjs这两个库,来实现裁切图片的功能。通过在终端中输入以下命令来安装: npm install vue-cropperjs croppe…

    Vue 2023年5月27日
    00
  • 在vue中使用setInterval的方法示例

    在Vue中使用setInterval来执行周期性任务的方法如下: 在Vue组件的mounted钩子函数中,调用setInterval方法设置周期性任务的执行函数和时间间隔,同时将返回的计时器ID保存到组件的data对象中。 <template> <div>{{ count }}</div> </template&gt…

    Vue 2023年5月29日
    00
  • 微信小程序实战基于vue2实现瀑布流的代码实例

    为了更好地讲解微信小程序实战基于vue2实现瀑布流的代码实例,我们可以按照以下步骤展开: 1. 准备工作 首先需要在本地安装 Vue-cli 和 Weex-toolkit,打开命令行窗口,输入以下命令进行安装。 npm install -g vue-cli npm install -g weex-toolkit 2. 创建项目 接着,在命令行窗口中输入以下命…

    Vue 2023年5月27日
    00
  • vue 项目代码拆分的方案

    以下是“Vue项目代码拆分的方案”的完整攻略: 1. 为什么需要代码拆分 在一个大型的Vue项目中,随着业务的增长,代码量也不断增加。如果所有的代码都写在单个文件中,会降低代码的可维护性、阅读性和重用性,代码文件会变得非常庞大和复杂,难以维护。 而代码拆分可以将代码按照逻辑、功能等方面进行拆分,将不同的功能模块分割到不同的文件、组件中,可以让代码更为模块化、…

    Vue 2023年5月27日
    00
  • Vue组件之极简的地址选择器的实现

    首先我们需要了解一下Vue组件的基本知识。 什么是Vue组件? Vue 组件是可复用的 Vue 实例,拥有自己的视图和行为。在 Vue 中,组件是基本的代码复用单元,一个页面可以由多个小的组件组成,每个组件封装了自己的代码和模板,可以单独的进行开发、测试和维护。 Vue组件的基本结构 一个 Vue 组件通常由模板、样式和逻辑组成。模板是组件的显示部分,样式是…

    Vue 2023年5月29日
    00
  • Vue实现可移动水平时间轴

    Vue实现可移动水平时间轴 1. 引入样式文件 在head标签内引入需要用到的样式文件,例如: <head> <link rel="stylesheet" href="timeline.css"> </head> 2. 组件的结构 要实现一个时间轴,我们需要用到一个列表(<ul…

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