我正在研究一个简单的图像滑块组件。在模板中,我使用v-for
创建img
代码,使用ref
来保留对每个代码的引用。
Vue.component('slide', {
template: `
<div class="c-image-slider">
<img ref="im" :key="image" class="c-image-slider__slide" v-for="image in images" :src="image">
</div>
`,
data() {
return {
currentImage: 0,
images: [],
};
},
mounted() {
this.images = images;
console.log(this.$refs);
console.log(this.$refs.im);
},
});
在组件的mounted()
挂钩中,我正在尝试记录this.$refs.im
数组,但结果是undefined
,即使数组是定义的。我错过了什么?
这也是复制该问题的笔:https://codepen.io/anon/pen/LQMMBK
答案 0 :(得分:3)
Re-renders are asychronous。在此处安装图像时设置:
this.images = images;
您触发重新渲染,但Vue不会立即执行此操作。 之前,没有$refs
,因为尚未呈现图片。
当您立即记录$refs
时,其日志记录与该时间点的完全相同。然后发生计划的重新渲染,Vue填充$refs
。
您可以使用$nextTick正确注销。
mounted() {
this.images = images;
this.$nextTick(() => {
console.log(this.$refs);
console.log(this.$refs.im);
})
}
更新了pen。
答案 1 :(得分:0)
尝试使用:
<base href="./">