zoukankan      html  css  js  c++  java
  • uniapp 选项卡动态切换更新数据问题

    业务场景:
    选项卡a,b,c
    下面的 scrollor 滑动块
    点击a 给循环变量data赋值a数组
    点击b 给循环变量data赋值b数组

    以上场景比如点击表情包,下面的表情内容会改变,而且表情是左右可以滑动的,像qq或者微信那样。此类场景经常有新手遇到所以特此提供解决方案以便大家避坑

    出现的问题:
    当选项卡在a处,表情内容滑动到第二个view。
    点击选项卡b,表情内容还是在第二个view。正常是回到第一个view。

    问题原因:
    组件属性设置不生效

    粗线画重点

    当重复设置某些属性为相同的值时,不会同步到view层。 例如:每次将scroll-view组件的scroll-top属性值设置为0,只有第一次能顺利返回顶部。 这和props的单向数据流特性有关,组件内部scroll-top的实际值改动后,其绑定的属性并不会一同变化

    监听scroll事件,记录组件内部变化的值,在设置新值之前先设置为记录的当前值

    <scroll-view :scroll-top="scrollTop" scroll-y="true" @scroll="scroll">
    export default {
        data() {
            return {
                scrollTop: 0,
                old: {
                    scrollTop: 0
                }
            }
        },
        methods: {
            scroll: function(e) {
                this.old.scrollTop = e.detail.scrollTop
            },
            goTop: function(e) {
                this.scrollTop = this.old.scrollTop
                this.$nextTick(function() {
                    this.scrollTop = 0
                });
            }
        }
    }
    

    监听scroll事件,获取组件内部变化的值,实时更新其绑定值

    <scroll-view :scroll-top="scrollTop" scroll-y="true" @scroll="scroll">
    export default {
        data() {
            return {
                scrollTop: 0,
            }
        },
        methods: {
            scroll: function(e) {
                // 如果使用此方法,请自行增加防抖处理
                this.scrollTop = e.detail.scrollTop
            },
            goTop: function(e) {
                this.scrollTop = 0
            }
        }
    }
    

    第二种解决方式在某些组件可能造成抖动,推荐第一种解决方式。

  • 相关阅读:
    Xcode 增强开发效率的插件
    svn 常用指令
    初识JFinal
    企业竞争案例分析
    可行性研究5
    可行性研究习题4
    可行性研究课后题
    关于阅读软件工程和计算机科学技术区别的文章来谈谈自己看法
    关于中文编程是解决中国程序员效率的秘密武器的问题思考
    Java ForkJoinPool 用法及原理
  • 原文地址:https://www.cnblogs.com/huangjunjia/p/13068161.html
Copyright © 2011-2022 走看看