【发布时间】:2021-11-17 19:31:17
【问题描述】:
对于使用 VueJS 的购物车应用程序,我有一个分页的产品列表。当用户打开页面时会获取所有产品,然后我使用页面变量来知道要显示哪些产品。 当我从第 1 页转到第 2 页时,产品被新产品取代,但图像需要时间来改变。在我的电脑上大约需要 1 秒,而在我的手机上需要 2 秒。一些用户告诉我它甚至更长。问题是在加载时,它会显示上一页中另一个产品的图像。因此,在新页面上的几秒钟内,有些产品的名称和图像与其不对应。 你知道为什么会这样吗?如果加载新图片需要时间,我宁愿在加载时什么都没有,而不是拥有上一页的图片。
我对 vutify v-autocomplete 有同样的问题,其中每个项目都有一个图像。
我的分页实现概述(我认为这不是问题,因为 v-autocompetes 有同样的问题):
<div
v-for="(product, i) in productsByIDPaginated"
:key="i"
>
<img
v-if="product.imagesNumber > 0"
@click.stop="toProductDetailsPage(product)"
:src="imageUrl(product)"
@error="replaceByDefault"
/>
<img
v-else
@click="toProductDetailsPage(product)"
src="../assets/unknown2.jpg"
/>
</div>
<script>
productsByIDPaginated() {
return this.productsByIDFiltred.slice(
this.numberProdsByPage * (this.page - 1),
this.numberProdsByPage * this.page
);
},
</script>
【问题讨论】:
-
听起来像是一个指向更深层次问题的症状:(1) 为什么您的图像需要永远加载?它们有这么大吗?它们可能应该被优化,(2) 当从一个视图切换到另一个视图并加载异步数据(在这种情况下为图像)时,你可能想要一个加载状态。
-
我的图像大概是 50 kB 到 150 kB 应该小于这个吗? + 如何实现加载状态?如何知道何时获取所有图像?
-
可能对您的具体问题没有帮助,但不要在
v-for循环中使用索引作为:key... -
@MichalLevý 为什么不用,用什么代替?
标签: javascript html vue.js vuetify.js