Альтернативное решение: Похоже, что единственная разница между v-if
и v-else
- это b-img
* src
, поэтому альтернативой может быть перемещение логики в JavaScript, отображениеWork.sub
в массив URL-адресов изображений, которые по умолчанию равны default_avatar
, только если URL не разрешается.
Таким образом, ваш шаблон будет выглядеть так:
<template>
<div v-for="(img, index) in images" :key="index">
<b-img :src="img" />
</div>
</template
Вы добавили бысвойство data для хранения URL-адресов изображений:
data() {
return {
images: []
}
}
И наблюдатель на Work.sub
, который устанавливает this.images
:
watch: {
'Work.sub': {
immediate: true,
async handler(sub) {
// For each image URL, attempt to fetch the image, and if it returns
// data (image exists), collect the URL. Otherwise, default.
this.images = await Promise.all(Object.keys(sub).map(async (key) => {
const img = sub[key];
if (!img) return this.default_avatar;
const url = `//placekitten.com/${img}`;
const { data } = await axios.get(url);
return data ? url : this.default_avatar;
}));
}
}
}
demo