关于滚动条更新的2种方法,为什么不直接调用updateScroll方法,而要在组件间传参这么麻烦呢?
来源:4-4 更新滚动条和图片的懒加载
Raznov
2020-03-12 15:51:54
在视频中,老师说更新滚动条有2种方法,但是他选择的是通过在home组件中接收recommend数据的变化,然后home组件把变化的值给scroll组件,scroll组件内部通过监听变化来更新滚动条,这个过程是不是有点复杂了?
老师在视频中预留了空的updateScroll 方法,我自己试着做了下,感觉清晰了很多。
为什么不选择使用这一种更简单的方法呢?
<!-- Home组件里:recommend组件加载到数据后,触发更新滚动条事件 --> <home-recommend @loaded="updateScroll" ref="recommend" />
methods: { // 然后Home组件调用Scroll组件里的更新滚动条函数 updateScroll () { this.$refs.scroll.update() },
//Scroll组件里:执行滚动条更新 update () { setTimeout(() => { this.$refs.swiper && this.$refs.swiper.swiper.update() }, 0) }
3回答
同学你好,课程中想的是更新的操作都在scroll组件中完成,所以复杂了一些,将recommend组件中数据更新的消息传递给了父组件,然后再传入scroll组件中。
同学能够自己简化是很棒哦!能够实现效果就可以。
祝学习愉快!
好帮手慕星星
2020-03-13
同学你好,loaded事件是在recommend子组件中触发的,那么这个事件只能绑定在父组件上
不能绑定在其他组件上,也触发不了,所以没有效果。
自己再测试理解下,祝学习愉快!
Raznov
提问者
2020-03-12
老师,那可不可以不经过Home组件,scroll组件的滚动条就能随着recommend的更新而更新呢?
在recommend组件的数据更新后,它emmit了loaded事件,由scroll组件上设置的事件监听器@loaded="update"接收。但是我试了下,完全没反应,scroll组件内部没法监听到recommend组件触发的事件,这是为什么呢?
//scroll组件 <template> <!-- 滚动条容器 --> <swiper ref="swiper" :options="swiperOption" @loaded="update" > </template> <script> export default { methods: { update () { console.log('更新滚动条') this.$refs.swiper && this.$refs.swiper.swiper.update() } } } </script>
相似问题