vue中,所有的元素都是js动态生成,哪怕你在body里面写了html标签,那些标签也会被删除重新生成。
然后this.$nextTick是有dom渲染完成触发的,你把this.$nextTick写在mounted函数中,页面一打开,肯定有标签,然后渲染,dom完成了,然后this.$nextTick就触发了,ajax去获取数据,肯定要有一小会时间,比this.$nextTick还要慢很多,所以li没出来,获取ul高度就是0。
this.$nextTick不是说for渲染完数据就触发, 是有标签生成好就触发。
在ajax的成功回调里,即使数据过来了,然后赋值给list,也要在this.$nextTick这个回调函数里面获取ul的高度。
给个例子:
{{v}}
var mx=new Vue({
el:'#box',
data:function(){
return {
list:[]
}
},
mounted:function(){
setTimeout(function(){
this.list=[1,2,3,4,5];
this.$nextTick(function(){
console.log( '2:'+this.$el.offsetHeight );//for渲染完,获取正常
});
console.log('1:'+this.$el.offsetHeight)//先触发,高度0
}.bind(this),1000);//延时1s模拟下ajax
}
});