1 数据渲染
template
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <van-list v-for="items in tabbar" :key="items.id" v-show="items.isActive" v-model="items.loading" :finished="items.finished" finished-text="没有更多了" @load="onLoad(items)" ref="listItem" > <van-cell v-for="item in items.list" :key="item" :title="item">{{ items.value }}</van-cell> </van-list>
|
data
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| data() { return { tabbar: [ { id: 1, value: "Lorem", isActive: true, loading: false, finished: false, list: [], }, { id: 2, value: "Lorem2", isActive: false, loading: false, finished: false, list: [], }, { id: 3, value: "Lorem3", isActive: false, loading: false, finished: false, list: [], }, ], }; },
|
methods
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| onLoad(obj) { setTimeout(() => { for (let i = 0; i < 10; i++) { obj.list.push(obj.list.length + 1); }
console.log(obj.id); console.log(obj.finished);
obj.loading = false;
if (obj.list.length >= 40) { obj.finished = true; } }, 1000); },
onClickLoadData(obj) { this.tabbar.forEach((item) => { item.isActive = false; }); obj.isActive = true; },
|
切换页面 会发现 数据不会加载
这是为什么呢?
这是因为页面渲染的时候 已经进行过加载了 在点击切换按钮的时候 并没有触发onload事件
那么你可能会说 那点击的时候调用一次onLoad事件不就好了么?
对 点击的时候调用一次onLoad是会触发调用
但是呢?
第一个问题:如果第一次加载的数据不足以铺满全屏,那么 数据就不会继续加载了
第二个问题:如果你的数据已经全部加载结束了,但是你点击切换的时候 由于你调用了onLoad事件。就还会触发。
那么!
你也许会问 那该怎么做呢?
那么现在我就告诉你
超简单 一行代码搞定
官方给了一个 check方法
所以 我们就可以这样做
1 2 3 4 5 6 7 8 9 10 11
|
onClickLoadData(obj) { this.tabbar.forEach((item) => { item.isActive = false; }); obj.isActive = true; + this.$refs.listItem[obj.id - 1].check();检查点击的选项所显示的页面的滚动位置,若已滚动至底部,则会触发 load 事件 [obj.id - 1]为选中当前的list },
|
完美搞定
2.遇到的坑 记录于2020.07.07
1.问题
在第一次打开页面刷印,且是第一次下啦都底部进行加载请求的时候,请求了两次。之后,只要不刷新页面,就不会再出现一下请求两次的问题。
2.出现这个问题,让小编疑惑到怀疑人生
刚开始,还以为是自己代码逻辑写错了!就一直读之前写的代码,看vant的文档。最终发现,代码没有任何问题。在网上查找,由于问题不好描述,也没有查到相应的答案。 痛苦至极
稳住心,开始在浏览器上测试,过一个小时左右时间的折腾,终于,找到了答案。

主要原因在于,下面下啦的内容是一个全局的懒加载组件,只有在使用到的时候,才会请求加载这个组件的js
可以看到,在第一次请求接口的完成后,才请求了这个js文件。之后由于页面还没有渲染,导致高度不够,所以就又请求了一次。
3. 解决问题
终于,找到了原因,接下来解决就很简单了。
方式一:把这个全局组件的懒加载去掉,改成不懒加载就好了。
方式二:把这个全局组件单独在这个页面引入一次。
注意:部分文章可能会在不就的将来更新
如果能够帮助到你,是小编最大的荣幸
当然 有 不好的地方 请大家帮忙指出 学习永无止境
小编一直认为 人外有人 天外有天 一起学习 共同进步
让我们共同加油吧!!!
版权声明: 转载请留言,未经许可禁止转载,转载时请注明出处(必须保留作者署名及链接)