当前位置: 首页 > news >正文

在vue中,使用this.$refs.myDiv.offsetHeight获取组件高度,结果却报错,是因为...

问题描述

想要获取一个元素的高度,它的高度是不固定的,每次调用接口数据后都要重新获取它的高度,根据它的高度去变更页面中另一个元素的高度。

模板文件

<search-list ref="searchListRef" :code="currentRelation ? currentRelation.value : 1" :data="tableData" @selectRow="handleSelectRow" @gotoDetail="gotoDetail" />

脚本文件

mounted () {this.$nextTick(() => {const maxHeight = this.$refs.searchListRef.clientHeight;const winHeight = document.body.clientHeightthis.maxHeight = maxHeight > winHeight ? maxHeight : winHeight})	
}

代码没有按照预期的那样运行,报错了,this.$refs.searchListRef.clientHeight报错了

报错原因分析

经过一番错误分析,发现this.$refs 访问到的是searchList这个组件,并不是他的根元素,因为我是在组件上绑定的ref,如果把ref直接绑定在div上是可以获取到dom的。

   <div ref="myDiv">Hello Vue!</div>
 methods: {accessDOM() {const myDivElement = this.$refs.myDiv;console.log(myDivElement); // 输出 DOM 节点}}

这种情况是可以访问到dom的。

解决方案

如果要在组件上绑定ref,可以使用下面两种方案获取到dom的值。

给组件绑定id,直接用getElementById获取dom

模板文件

<search-list ref="searchListRef" id="searchList" :code="currentRelation ? currentRelation.value : 1" :data="tableData" @selectRow="handleSelectRow" @gotoDetail="gotoDetail" />

脚本文件

mounted () {this.$nextTick(() => {const maxHeight = document.getElementById('searchList').clientHeight;;const winHeight = document.body.clientHeightthis.maxHeight = maxHeight > winHeight ? maxHeight : winHeight})	
}
利用子组件的ref

子组件(ChildComponent.vue)

<template><div ref="componentRoot"><!-- 组件内容 --></div>
</template><script>
export default {name: 'ChildComponent',methods: {getHeight() {return this.$refs.componentRoot.clientHeight;},},
};
</script>

父组件(ParentComponent.vue)

<template><div><child-component ref="childComponent"></child-component><button @click="logHeight">Log Height</button></div>
</template><script>
import ChildComponent from './ChildComponent.vue';export default {components: {ChildComponent,},methods: {logHeight() {const height = this.$refs.childComponent.getHeight();console.log('The height of the child component is:', height, 'px');},},
};
</script>

http://www.mrgr.cn/news/62099.html

相关文章:

  • MySQL—基础学习
  • 等概率器的求解
  • 「Mac畅玩鸿蒙与硬件5」鸿蒙开发环境配置篇5 - 熟悉 DevEco Studio 界面
  • 系统架构图设计(行业领域架构)
  • 数据结构
  • Python世界:自动化办公Word之批量替换文本生成副本
  • ljjh#True
  • Java继承的super关键字
  • 【C++刷题】力扣-#594-最长和谐子序列
  • C++ 之 VS2010 和MySQL数据库的链接问题
  • leetcode452. 用最少数量的箭引爆气球
  • Autosar AP SM中同EM相关的核心概念解析
  • 《探秘 POC 方案:开启创新之门的钥匙》
  • 如何使用SOCKS5代理提升匿名性
  • 两台主机只能单方向ping通
  • Spring Boot 创建项目详细介绍
  • SpringBoot最大的优势是什么?
  • 24.10.30 Python 包和模块
  • 加油-加油
  • C++基础: string(3)
  • 【ROS】详解ROS文件系统
  • 【ECMAScript标准】深入解析ES5:现代JavaScript的基石
  • InnoDB 存储引擎<四>磁盘文件一
  • QChart中柱形图的简单使用并实现【Qt】
  • 【力扣打卡系列】反转链表
  • python 模块和包、类和对象