问题:
在使用cube-scroll(封装better-scroll)作为vue移动端项目的滚动插件,出现了如下问题,初始化之后不能滚动,刷新之后又可以滚动。
目前暂时解决方案:
我在请求数据完成的回调函数中,添加了如下代码,
使用setTimeout始终不是好的解决方案,各位大佬有另外的方案吗?
问题:
在使用cube-scroll(封装better-scroll)作为vue移动端项目的滚动插件,出现了如下问题,初始化之后不能滚动,刷新之后又可以滚动。
目前暂时解决方案:
我在请求数据完成的回调函数中,添加了如下代码,
使用setTimeout始终不是好的解决方案,各位大佬有另外的方案吗?
有人遇到过同样的问题么
这是之前写的关于better-scroll的组件或许可以帮助到你https://github.com/zjfcool/vue-music/blob/master/src/base/scroll.vue如果你写的组件跟这差不多,八成是样式的问题,看情形应该是没有监听data变化的时候去再次refresh。
其实问题的核心就是:
数据在渲染之前,就已经初始化完组件。
理想的逻辑是:
数据获取完毕。
dom结点渲染完毕。
初始化/更新组件。
但总是不能达到这个效果。
获取 你在获取数据是 使用 async 或是 promise 做一次异步 调用初始化
跟这没关系,你数据如果是一直变的呢?
解决思路应该是这样:
当数据变动的时候去重新refresh,激活better-scroll,重新计算滚动距离。
类似这种:
watch:{
data(){
setTimeout(()=>{
this.refresh();
},this.refreshDelay)
}
}
滚动组件 你要考虑用户触发滚动了, 在去调用方法,
我不知道你的滚动组件是怎么做的,
但是所有的类似list组件基本都是大同小异,
监听用户scroll 滚动,在去做一些操作,获取或是更新数据
请问您所描述的问题解决了么?我也遇到同样的问题
better-scroll实例化之后内容高度就固定了,新数据渲染后,需要通知better-scroll再次更新内容高度
watch: {
height: {
handler: function (height) {
if (height) {
this.$nextTick(() => {
this.$refs.inWrapper.style.minHeight = height + 'px';
this.scroll && this.scroll.refresh();
})
}
}
}
},
methods: {
getHeight() {
this.$nextTick(() => {
if (this.$refs.page) {
this.$emit('height', this.$refs.page.offsetHeight);
}
});
},
getUserInfo() {
this.$store.dispatch('getUserInfo', {}).then(data => {
this.getHeight();
});
}
}