【发布时间】:2020-01-04 21:15:15
【问题描述】:
我有一个问题,我根据页面顶部选择的类别加载多个 Vuetify 卡组件。
问题是,如果数组渲染 +50 卡,则加载需要大量时间。我不介意加载时间,但我不喜欢页面在渲染过程中卡住并且我不能使用加载指示器。
我已经尝试在这里模仿这个问题:
https://jsfiddle.net/owa1czqx/2/
<script src="https://unpkg.com/vue"></script>
<div id="app">
<button v-for="cat in cats" :key="cat" @click="catSelected(cat)">{{cat}}</button>
<p v-for="item in items">{{ item }}</p>
</div>
new Vue({
el: '#app',
data: {
message: 'Hello Vue.js!',
cats: ['cat 1', 'cat 2'],
items: []
},
methods: {
catSelected(newCat) {
this.items = []
for (let i = 0; i <= 50000; i++) {
this.items.push(i + '. ' + newCat)
}
}
}
})
我想要的是在新卡片呈现之前向用户提供反馈。如果我加载数据,是否可以像我异步获取一样以某种方式异步渲染?
不幸的是,分页或自动滚动加载在我的情况下不是有效的解决方案,因为它会破坏设置的布局。
【问题讨论】:
-
为什么不使用两个
divs,一个用于加载gif,另一个用于app。只需在mounted上更改他们的可见性 -
你能修改 jsfiddle 让它工作吗?如果我使用另一个 div,它就不起作用,因为页面无论如何都会卡在渲染上。需要时间的过程是使所有卡片呈现的过程。
-
我不确定您是否真的可以绕过浏览器因渲染而忙碌的部分
-
我能够在开始渲染过程之前显示“正在加载”消息。我显示加载消息,然后使用旧的 setTimeout( () => (//rendering here), 0) 开始渲染。该页面在渲染过程中失去了交互性,但它足以解决我的问题。
标签: javascript vue.js vuetify.js