gpt4 book ai didi

javascript - 如何在vuejs中异步加载图片src url?

转载 作者:太空狗 更新时间:2023-10-29 15:00:03 28 4
gpt4 key购买 nike

图像 url 在控制台中打印但不呈现到 src 属性。如何在 vuejs 中使用 async 和 await 实现这一点?

<div v-for="(data, key) in imgURL" :key="key">
<img :src= "getLink(data)" />
</div>

其中 imgURL 包含文件名,它是文件名的集合。

  methods: {
async getLink(url){
let response = await PostsService.downloadURL({
imgURL : url
})
console.log(response.data)
return response.data
}
}

我正在使用 axios 从后端获取 URL。

最佳答案

那是不可能的,从值创建/更新 DOM 的过程是一个同步过程。因此,Vue.js 将按原样直接使用 getLink 返回的值/对象,在您的情况下,这将是一个 Promise 对象。

要解决该问题,您需要为这些图像创建自己的组件。在该组件的创建回调中,您将调用 getLink,然后在 getLink 方法中,您将设置数据 link收到,这将触发重新渲染。

created() {
// when the instance ist create call the method
this.getLink();
},

methods: {
async getLink(){
let response = await PostsService.downloadURL({
imgURL : this.url
})
console.log(response.data)
this.link = response.data
}
}

在图像组件的模板中,你会有这样的东西:

<img :src= "link">

您现在肯定可以扩展该图像组件以包含加载指示器或类似的东西。

Vue.component('my-image-component', {
props: {
url: {type:String, required: true}
},
data : function() {
return {link : 'loading'}
},
template: '<div>{{ link }} </div>',
created() {
this.getLink();
},
methods: {
getLink() {
setTimeout(() => {
this.link = 'response url for link: ' + this.url
}, 1000)
}
}
})


new Vue({
el: '#app',
data: {
"imgURL": {
test1: "1234",
test2: "5678"
}
}
})
<div id="app">
<div v-for="(data, key) in imgURL" :key="key">
<my-image-component :url="data"></my-image-component>
</div>
</div>


<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js" type="text/javascript" charset="utf-8"></script>

关于javascript - 如何在vuejs中异步加载图片src url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50659676/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com