vue中this.$refs的坑及解决

目录
  • vue this.$refs的坑
    • 以下三点小坑坑
  • vue的坑 this.refs为空
    • 总结来说

vue this.$refs的坑

在开发中,有时需要使用到this.$refs ,用于操作真实的DOM节点。

说一说我在使用的时候,在开发时碰到了一个小需求,需要子组件向父组件传参,而且是不需要通过事件传递的,一开始使用this.$emit()来写的,但是一直没有接受到参数,于是放弃了使用this.$emit()的使用。

于是,使用了在父组件中调用子组件的方法,来获取传递的参数。但是还是没有获取到传递过来的参数。

以下三点小坑坑

1、使用this.$refs如果要在mouend()中使用,必须要在this.$nextTick(()=>{  } )   这里面实现,要不是找不到ref,原因是mouned()之后,BOM节点还没有完全挂载上,于是找不到定义的ref。

2、可以直接在updata()的生命周期函数中使用,不用写this.$nextTick(()=>{  } )

3、在methods:{  } 方法中使用,也需要使用this.$nextTick(()=>{  } ) 等到页面完全渲染完毕之后在调用即可

vue的坑 this.refs为空

我们在用vue的时候,会遇到一些坑,比如我们使用 this.$refs 获取不到值,页面明明有啊

百思不得其解……原来这个跟Vue的钩子有关系

总结来说

1、必须要等页面中的ref子组件加载完毕,才可以获取到

2、在mounted之前的钩子函数中获取不到

3、组件在v-if为false的父节点下,导致这个子组件未渲染,也是导致获取不到的因素,不要忽视哦

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Vue 解决通过this.$refs来获取DOM或者组件报错问题

    1.关于this.$refs的使用场景 如果ref属性加在普通元素上,那么this.$refs.name则指向该DOM元素 <p ref="p">hello</p> <!-- this.$refs.p 指向该DOM元素 --> 如果ref属性加在组件上,那么this.$refs.name指向该组件实例 <child-component ref="child"></child-component> <!

  • vue列表单项展开收缩功能之this.$refs的详解

    展开效果–看红框区域 收缩效果–看红框区域 接下来看代码逻辑 ###template部分:已去除与本文不相关的功能代码 <li class="main-video"v-for="(item, index) of courseSubList" :key="item.id"> <div class="audio-name"> <div class="img-l"> <s

  • vue关于this.$refs.tabs.refreshs()刷新组件方式

    目录 this.$refs.tabs.refreshs()刷新组件 第一种:当前组件刷新 第二种:刷新父组件时 第三种:非关系组件 vue组件重新加载(刷新) 如何刷新当前组件 this.$refs.tabs.refreshs()刷新组件 当更改了用户信息后,需要刷新页面或者组件. 第一种:当前组件刷新 定义一个请求用户信息的方法,在需要时调用: sessionStorage.setItem('userInfo',JSON.stringify(this.userInfo)); //从sessio

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

    目录 vue的ref(this.$refs获取为undefined) 1.你在哪里调用,和你调用的对象 2.调用对象是不是数组列表 3.调用对象是否和v-if结合使用 vue的$refs属性几个注意点 1.在vue中获取dom推荐使用$refs来获取 2.如果使用v-for vue的ref(this.$refs获取为undefined) 如果你获取到的总是空的,你注意一下: 1.你在哪里调用,和你调用的对象 试试在mounted()里面调用有效果没有 调用的对象是本来就存在的,还是需要数据渲染之

  • vue中this.$refs的坑及解决

    目录 vue this.$refs的坑 以下三点小坑坑 vue的坑 this.refs为空 总结来说 vue this.$refs的坑 在开发中,有时需要使用到this.$refs ,用于操作真实的DOM节点. 说一说我在使用的时候,在开发时碰到了一个小需求,需要子组件向父组件传参,而且是不需要通过事件传递的,一开始使用this.$emit()来写的,但是一直没有接受到参数,于是放弃了使用this.$emit()的使用. 于是,使用了在父组件中调用子组件的方法,来获取传递的参数.但是还是没有获取

  • 在vue中使用console.log无效的解决

    webpack开发环境下,在vue中使用console.log无效,一直以为webpack出了问题. 使用window.console.log()就能够顺利在浏览器控制台输出了. 以及 在axios请求的回调中依旧无法输出使用window.console.log()/console.log(),先留坑吧. 补充知识:vue中 :style 与 :class 三元运算符使用 style三元表达式 <p :style="{'color': (checkIndex3==m.txt ? '#3d8

  • vue中touch和click共存的解决方式

    在vue开发手机端项目时,我们经常会遇到touch和click共存的情况,比如城市选择页面的字母滑动 touch事件在手机端会触发浏览器滑动,所以应给touch事件添加阻止默认行为touchmove.prevent.注意阻止默认行为事件不要添加在touchstart事件上,会影响到click事件的发生. touch事件和click事件发生先后顺序: touchstart,touchmove,touchend,click 补充知识:touchstart与click同时触发 产生冲突的原因 我们可以

  • Golang时间处理中容易踩的坑分析解决

    目录 简介 类型 时区 小心有坑 时间解析的使用场景 时间操作 获取当前时间 时区设置 时间格式化(时间类型转字符串) 时间类型转时间戳 时间戳转时间类型 时间字符串转时间类型 时间计算 获取时间类型具体内容 时间加减 时间间隔(耗时) 时间取整(向上取整向下取整) 拓展 json时间转换 简介 在各个语言之中都有时间类型的处理,因为这个地球是圆的(我仿佛在讲废话),有多个时区,每个时区的时间不一样,在程序中有必要存在一种方式,或者说一种类型存储时间,还可以通过一系列的方法转换成不同国家的时间.

  • vue中使用refs定位dom出现undefined的解决方法

    之前在公司做项目,一直感觉用ref来定位dom节点挺方便的.但是期间遇到了一个问题,就是在mounted(){}钩子里面使用this.$refs.xxx,打印出来的却是undefined? 于是我就对比了一下之前使用ref定位的.vue文件,发现了他们之间的区别. 我们要想知道为什么会定位不到某个DOM节点,我们首先要理解mounted(){}这个钩子函数是用来做什么的. 下面是vue官方给出的vue生命周期(部分),正如官方所说的一样,一开始不必先理解,不过随这你的学习与使用,他的参考价值会越

  • webstorm和.vue中es6语法报错的解决方法

    1.webstorm中es6语法报错,解决方法: 打开 Settings => Languages & Frameworks => Javascript 把 Javascript Language version 改为 ECMAScript 6 这样做所有的.js文件中es6不再报错,但是.vue文件中es6语法依然报错. 2. .vue文件中es6语法报错 (1)打开 Settings => File Types 找到 HTML 添加 *.vue 这样vue文件就相当于html

  • 使用vue导出excel遇到的坑及解决

    目录 vue导出excel遇到的坑 需求 准备工作 vue导出excel表报错处理 vue导出excel遇到的坑 需求 Vue+element UI el-table下的导出当前所有数据到一个excel文件里. 先按照网上的方法,看看有哪些坑 准备工作 1.安装依赖:yarn add xlsx file-saver -S 2.在放置需要导出功能的组件中引入 import FileSaver from "file-saver"; import XLSX from "xlsx&q

  • vue监听scroll的坑的解决方法

    最近开始用vue写个小项目,踩了不少坑,这里记录下爬坑过程,给有同样经历的人帮助. 问题 今天想在vue的项目里面用下拉加载,然后就直接写了: 但是我发现我切换路由以后依旧其他页面也触发了scrollHandler函数,然后我想到使用了vue-router做的spa项目,window对象不变的,所以需要在每次使用后销毁. 解决办法 我回去看了下vue文档的生命周期,看到了destroyed,然后直接在这个周期内销毁就可以了. 使用throttle出现的新问题 下拉加载一般需要配合throttle

  • vue使用mui遇到的坑及解决

    目录 使用mui遇到的坑记录 mui的js冲突了,有2种解决方法 方法1 方法2 使用mui遇到的坑记录 主要用到webpack打包工具与mui,mint ui,其中mui有不少坑,在此记录 先是用mui的tab组件做了个底部选项卡,如下 不错,样式还行,但是后期发现切换选项的时候会报错Unable to preventDefault inside passive event listener due to target being treated as passive,如下 但是这个错误并不会

  • vue项目热更新的坑及解决

    目录 vue项目热更新坑 vue项目热更新慢 查找热更新慢是哪里慢—分析原因 解决办法 vue项目热更新坑 今天在使用vue-cli构造的vue项目时,遇到一个坑. setInterval(() => { console.log('This is one.') }, 10000) 运行后如下: 这时我们修改其中的代码,不刷新网页: setInterval(() => { console.log('This is two.') }, 1000) 结果如下,发现之前的计时函数以久存在,热更新 !=

随机推荐