2***@qq.com
2***@qq.com
  • 发布:2019-08-20 14:42
  • 更新:2019-08-20 15:39
  • 阅读:918

【报Bug】uni-app hello 打开页面 bug ??

分类:uni-app

创建项目,uni-app,hello,内置组件, 视图容器,快速点击子项目,比如 view ,会打开多个,至少 2 个....,不知道算不算 bug,我用的真机调试。

2019-08-20 14:42 负责人:无 分享
已邀请:
2***@qq.com

2***@qq.com (作者) - 嗯嗯嗯,撂了吧,我写bug呢。

没那么夸张,试了多回,快速点击,打开两个 view (或其他的)页面,看了看代码,我看有个 navigateFlag,好像没起作用...,我在研究下代码。

2***@qq.com

2***@qq.com (作者) - 嗯嗯嗯,撂了吧,我写bug呢。

            goDetailPage(e) {  
                var _this = this;  
                if (_this.navigateFlag) {  
                    return;  
                }  
                _this.navigateFlag = true;  
                if (typeof e === 'string') {  
                    uni.navigateTo({  
                        url: '/pages/component/' + e + '/' + e,  
                        complete: function() {  
                            // console.log(_this)  
                            setTimeout(() => {  
                                _this.navigateFlag = false;  
                            }, 300)  
                        }  
                    })  
                } else {  
                    uni.navigateTo({  
                        url: e.url,  
                        complete: function() {  
                            // console.log(_this)  
                            setTimeout(() => {  
                                _this.navigateFlag = false;  
                            }, 300)  
                        }  
                    })  
                }  
            }

改成这德行的就行了,不会因为快速点击而打开重复页面。

  • 2***@qq.com (作者)

    这个方法也不太严谨,如果快速始终按屏幕最左边,还是会有一定的机率打开重复页面,即使是把 300 调成 400,也不行,更多也许会更好,但是不大地道。

    2019-08-20 15:35

2***@qq.com

2***@qq.com (作者) - 嗯嗯嗯,撂了吧,我写bug呢。

最终的解决方法:

        onShow: function(){  
            this.navigateFlag = false;  
        },  
        methods: {  
            triggerCollapse(e) {  
                if (!this.list[e].pages) {  
                    this.goDetailPage(this.list[e].url);  
                    return;  
                }  
                for (var i = 0; i < this.list.length; ++i) {  
                    if (e === i) {  
                        this.list[i].open = !this.list[e].open;  
                    } else {  
                        this.list[i].open = false;  
                    }  
                }  
            },  
            goDetailPage(e) {  
                if (this.navigateFlag) {  
                    return;  
                }  
                this.navigateFlag = true;  
                if (typeof e === 'string') {  
                    uni.navigateTo({  
                        url: '/pages/component/' + e + '/' + e  
                    })  
                } else {  
                    uni.navigateTo({  
                        url: e.url  
                    })  
                }  
            }

对,在 onShow 里设置 false ,用生命周期解决,用 onHide 不行,因为页面执行动画到打开时间 有 300 ms(默认),onHide 监听的太快了,所以不行。只要在 goDetailPage 里设置成 true 就行了,也就是只能点一次,这时候会打开详细页面,当前页面会 onHide ,当从详细页面退回到“列表”页面时,此页面的 onShow 会被触发,然后.....ok 了。

该问题目前已经被锁定, 无法添加新回复