初学vue作练习项目的时候,基于vue2.0版本使用refs属性获取v-for循环的dom时出现获取不到dom的状况,尝试采用原生的方法出现一样的状况。查了不少资料没有找到对应的详细说明,现将我发现的一些问题分享给你们。html
html部分vue
<div class="food-group" v-for="(item,index) in goods" :key="index" ref="group">
....
</div>
复制代码
定义的方法methodsbash
methods: {
getHeightList() {
let height = 0;
this.heightList.push(height);
// let list = this.$refs.goods.getElementsByClassName("food-group");
console.log(this.$refs);
console.log(this.$refs.group);
}
},
复制代码
尝试在mounted生命周期里面执行方法获取refs的DOMdom
mounted() {
this.$nextTick(() => {
this.menuScroll = new BScroll(this.$refs.menu);
this.goodsScroll = new BScroll(this.$refs.goods);
this.getHeightList();
});
}
复制代码
出现的结果函数
能够发现这里打印this.refs里面是有group对应的Dom的,可是在下面答应对应的Dom的时候出现undefined的状况,下面是尝试把ref获取改为d原生获取的方法。ui
methods: {
getHeightList() {
let height = 0;
this.heightList.push(height);
let list = this.$refs.goods.getElementsByClassName("food-group");
//this.$refs.goods是刚才要获取的Dom的父元素,food-group是要获取的Dom的类名
console.log(list);
console.log(list.length);
}
},
复制代码
出现的结果this
能够看到这里出现的状况和上面ref获取出现的状况是同样的,打印出来是有的,可是一旦输出结果却发现length是0,也就是没有获取到。spa
在操做dom的自定义函数执行先后加入debugger调试,发如今该函数执行的时候,数据并无绑定,dom也仍是没有渲染的状态,这和网上一些帖子讲的是同样的,可是问题来了,该函数执行也是在this.$nextTick里面执行的,应该是Dom渲染完成菜执行的。这里就引出了这里的关键性的问题:debug