我正在使用Vue Resource从REST API检索图像集合。请求在我的Vue组件的created
挂钩中发送。
问题是,我正在尝试访问mounted
挂钩中检索到的数据,但未加载数据。
我在控制台中收到此错误:
[Vue警告]:挂钩错误:“TypeError:无法读取属性'forEach'未定义”
这是我的组件:
<script>
export default {
data() {
return { imgs : '' };
},
created() {
// the full url is declare in my main.js
this.imgs = this.$resource('acf/v3/pages/4');
this.imgs.query().then((response) => {
console.log('success', response);
this.imgs = response.data.acf.gallery;
}, (response) => {
console.log('erreur', response);
});
},
mounted() {
// get the ref="image" in my dom template
let imgs = this.$refs.image;
imgs.forEach((img) => {
// I do some stuff with imgs
});
}
}
</script>
如果我将setTimeout
包裹在mounted
的内容周围,一切正常。
所以,我不明白如何在执行mounted
挂钩之前等待我的数据加载。这不是Vue生命周期钩子的作用吗?
答案 0 :(得分:4)
由于this.imgs.query()
调用是异步的,因此在mounted
处理程序设置then
之前调用了this.imgs
挂钩(我假设是绑定的)使用v-for
将ref="image"
添加到模板中具有属性$refs
)的元素。因此,即使组件已安装到DOM,then
尚未设置。
我会制定一个方法,以便用imgs&#34;做一些事情。然后在异步调用的$nextTick
处理程序中的$nextTick
callback中调用该方法。传递给$refs
的回调将在下一个DOM更新周期&#34;之后执行,这意味着此时将设置<script>
export default {
data() {
return { imgs: '' };
},
created() {
// the full url is declare in my main.js
this.imgs = this.$resource('acf/v3/pages/4');
this.imgs.query().then((response) => {
console.log('success', response);
this.imgs = response.data.acf.gallery;
this.$nextTick(() => this.doStuffWithImgs());
}, (response) => {
console.log('erreur', response);
});
},
methods: {
doStuffWithImgs() {
// get the ref="image" in my dom template
let imgs = this.$refs.image;
imgs.forEach((img) => {
// I do some stuff with imgs
});
}
}
}
</script>
。
javac -cp '<location of jars>/*' MyRtmpClient.java
答案 1 :(得分:1)
如Vue实例的Lifecycle Diagram中所示。在Mounted Hook(这意味着我们可以访问DOM)之后,还有beforeUpdate和更新的Hook。更改数据时可以使用这些挂钩。我认为在获取已创建的挂钩中的数据之后,可以使用beforeUpdate或update挂钩。
<script>
export default {
data() {
return { imgs : '' };
},
created() {
// the full url is declare in my main.js
this.imgs = this.$resource('acf/v3/pages/4');
this.imgs.query().then((response) => {
console.log('success', response);
this.imgs = response.data.acf.gallery;
}, (response) => {
console.log('erreur', response);
});
},
// here we can use beforeUpdate or updated hook instead of mounted
beforeUpdate() {
// get the ref="image" in my dom template
let imgs = this.$refs.image;
imgs.forEach((img) => {
// I do some stuff with imgs
});
}
}
我希望这有帮助。
我想提醒一下,我是VueJS的新手,现在正在学习)。