在vue中需要获取Dom时可以给元素添加ref属性,然后通过this.$refs.xx
去获取Dom元素, 但是在获取时可能会返回undefined导致我们对Dom节点的操作报错。因为在Vue生命周期中的created()钩子函数是对模板和数据进行初始化,$el
还没有挂载到Dom节点上,所以当使用this.$refs.xx
去获取元素就会返回undefind,而在mounted()钩子函数的$el
已经挂载到Dom节点上了所以可以使用this.$refs.xx
来获取Dom节点。
- 元素标签绑定ref属性时,使用mounted()钩子函数获取
<template>
<div>
<p ref='content'></p>
</div>
</template>
created(){
console.log(this.$refs.content)
},
mounted(){
console.log(this.$refs.content)
},
- 当元素标签同时绑定ref属性和v-if或v-show时,使用定时器setTimeOut()方法来获取
<template>
<div>
<p ref='contentShow' v-if="show"></p>
<button @click='handlerContentShow()'></button>
</div>
</template>
mounted(){
console.log(this.$refs.contentShow)
},
methods(){
handlerContentShow(){
console.log(this.$refs.contentShow)
setTimeout(function(){
console.log(this.$refs.contentShow)
},100)
}
},