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

yizhihongxing

“关于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.js 2.0新增的虚拟DOM

    探究Vue.js 2.0新增的虚拟DOM 在Vue.js 2.0中,引入了虚拟DOM,它是在DOM上的一个抽象层。使用虚拟DOM有以下几个优点: 性能优化。虚拟DOM可以避免不必要的DOM操作,减少了重绘和回流次数,提升了渲染效率。 跨平台开发。虚拟DOM可以在不同平台上实现原生DOM上没有的特性,例如React Native中的Flexbox布局。 更好的…

    Vue 2023年5月28日
    00
  • vue基于Element构建自定义树的示例代码

    下面是针对“vue基于Element构建自定义树的示例代码”的完整攻略,希望能够帮到你: 步骤一:安装Element依赖 首先,在使用Element构建自定义树之前,需要先安装Element组件库。可以通过npm或yarn来完成安装: npm i element-ui -S 或者 yarn add element-ui 步骤二:引入Element 在Vue项…

    Vue 2023年5月28日
    00
  • 详解在Vue中使用TypeScript的一些思考(实践)

    下面是详细讲解: 标题 “详解在Vue中使用TypeScript的一些思考(实践)” 思路 本文将介绍在Vue.js中使用TypeScript时,如何解决一些常见问题的思路和实践方法。 正文 为什么使用TypeScript? TypeScript是JavaScript的超集,为JavaScript的弱类型特性提供了一定的类型检查和自动补全功能。在大型项目中使…

    Vue 2023年5月28日
    00
  • Vue组件中的data必须是一个function的原因浅析

    Vue组件中的data必须是一个function的原因主要是因为Javascript中的对象和数组都是引用类型,如果直接把这些引用类型数据直接赋给组件实例的data属性,那么修改其中一个组件实例的数据时,会影响其它实例的数据。使用函数返回一个新对象可以确保每个组件实例都有自己独立的数据。 以下是两个示例: 示例1 <template> <d…

    Vue 2023年5月28日
    00
  • JavaScript实现的圆形浮动标签云效果实例

    下面是实现“JavaScript实现的圆形浮动标签云效果实例”的完整攻略: 1. 实现思路 要实现圆形浮动标签云效果,我们需要根据标签数量生成标签,并随机赋予标签位置和颜色等属性,随着页面滚动,标签应该在页面中随机漂浮。实现的大致思路如下: 准备标签数据; 创建标签元素,设置属性和样式; 随机位置和颜色等属性; 将标签添加到页面中; 定时器控制标签漂浮效果。…

    Vue 2023年5月29日
    00
  • vue2.0 datepicker使用方法

    Vue2.0 Datepicker使用方法 简介 Vue2.0 Datepicker是一个基于Vue2.0和moment.js的日期选择器组件,它可以帮助你方便地选择日期并将所选日期返回给你的应用程序。 安装 安装Vue2.0 Datepicker很简单,只需要使用npm命令即可: npm install vue2-datepicker –save 使用 …

    Vue 2023年5月29日
    00
  • Vue组件的使用及个人理解与介绍

    下面是关于“Vue组件的使用及个人理解与介绍”的完整攻略。 什么是Vue组件 组件是Vue.js中最强大的功能之一,它将复杂的应用程序拆分为更小的、可复用的部分,从而使开发变得更为简单。通常情况下,一个页面或一个区域都由多个组件组成,每个组件可以自行维护自身的状态和逻辑,使得组件之间的通讯和协作更加简单和灵活。 Vue组件的使用 全局组件 全局组件可以在应用…

    Vue 2023年5月27日
    00
  • rollup3.x+vue2打包组件的实现

    下面是rollup3.x+vue2打包组件的实现攻略: 什么是Rollup Rollup是一个JavaScript模块打包器,可以将小块代码编译成大块复杂的代码,它专注于ES模块的打包。 Rollup和Vue组件库打包 Vue组件库是一种常见的前端开发方式,它可以将页面中可复用的组件单独封装成一个独立的组件库,使用时只需要引用该组件库就可以方便地使用这些组件…

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