问题描述
我看到Quasar无限滚动(https://quasar.dev/vue-components/infinite-scroll)是以将“新”对象推入模型为基础的。
但是我已经使用Getter将自身(具有10多个过滤器)设置为过滤器,该过滤器返回数据(请参见代码示例)
我的问题是如何做到最好?
- 是否可以在不推动无限滚动的情况下实现无限滚动? 还是页面很难渲染150-200-250,因为页面全部渲染了。
- 在将其推入下一个5个数组时,我应该这样做吗? 如果是这样,我如何确定它第一次获得20首。接下来是21-40,接下来是41-60 ...等等?
我的代码示例
https://codepen.io/walkerca/pen/QWWxaMo
const store = new Vuex.Store({
state: {
items: [
{"id": "123","category": "AAA"},{"id": "124","category": "BBB"},{"id": "125",{"id": "126","category": "CCC"},{"id": "127","category": "DDD"},{"id": "128","category": "AAA"}
]
},getters: {
filteredItems: state => currentCategory => {
if( currentCategory == null ) {
return state.items;
}
return state.items.filter( itm => itm.category == currentCategory );
}
}
});
new Vue({
el: "#app",store,template: `
<section class="section">
<h1 class="title">Vuex Getter Filter #2</h1>
<div class="content">
<p>This demonstrates how a list of items maintained in Vuex state can be filtered using a getter. An HTML <code><select></code> manipulates a data field "currentCategory" which is bound to the select with a v-model. The v-model value is used as the parameter to a Vuex getter.</p>
<p>
For an alternative CodePen in which "currentCategory" is kept as state in Vuex follow <a href="https://codepen.io/walkerca/pen/rNNKpja" target="_blank" >this link</a>.
</p>
</div>
<div class="field">
<label class="label">Filter On</label>
<div class="control">
<div class="select">
<select v-model="currentCategory">
<option :value="null">Select Category</option>
<option value="AAA">AAA</option>
<option value="BBB">BBB</option>
<option value="CCC">CCC</option>
</select>
</div>
</div>
</div>
<table class="table is-fullwidth">
<thead><tr><th>Id</th><th>Category</th></tr></thead>
<tbody>
<tr v-for="itm in $store.getters.filteredItems(currentCategory)" :key="itm.id">
<td>{{ itm.id }}</td>
<td>{{ itm.category }}</td>
</tr>
</tbody>
</table>
</div>
</section>
`,data: {
currentCategory: null
}
});
无限滚动类比
HTML
<div id="q-app">
<div class="q-pa-md">
<q-infinite-scroll @load="onLoad" :offset="250">
<div v-for="(item,index) in items" :key="index" class="caption">
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Rerum repellendus sit voluptate voluptas eveniet porro. Rerum blanditiis perferendis totam,ea at omnis vel numquam exercitationem aut,natus minima,porro labore.</p>
</div>
<template v-slot:loading>
<div class="row justify-center q-my-md">
<q-spinner-dots color="primary" size="40px"></q-spinner-dots>
</div>
</template>
</q-infinite-scroll>
</div>
</div>
JS
new Vue({
el: '#q-app',data () {
return {
items: [ {},{},{} ]
}
},methods: {
onLoad (index,done) {
setTimeout(() => {
if (this.items) {
this.items.push({},{})
done()
}
},2000)
}
}
})
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)