tdesign-miniprogram icon indicating copy to clipboard operation
tdesign-miniprogram copied to clipboard

[Dialog] 偶发现出现弹窗无法关闭的情况

Open Zlianxin opened this issue 2 years ago • 3 comments

tdesign-miniprogram 版本

1.1.8

重现链接

No response

重现步骤

通过命令的方式调用 Dialog 组件,在确定按钮中执行以下两个操作 1、关闭弹窗 2、画面跳转

代码如下所示

const checkdialog = {
  content:
    '您在当前运营区域内没有购买该电池型号的换电套餐,请购买套餐后再继续操作',
  confirmBtn: {
    content: '购买套餐',
    bindtap({}) {
      Dialog.close();
      wx.navigateTo({
	    url: '/pages/product/product-choose/index',
	  });
    },
  },
  cancelBtn: '取消',
};
Dialog.confirm(checkdialog);

期望结果

弹窗能够正常关闭,画面能够跳转。

实际结果

偶发性会出现弹窗不能关闭的现象(即,画面正常跳转,但返回的时候,画面上的弹窗还显示在画面上,且无法关闭) 手机性能越低,触发的情况越多;手机性能高时,相对来说没有问题。

但如果代码做如下修改,就可以正常使用。

const checkdialog = {
  content:
    '您在当前运营区域内没有购买该电池型号的换电套餐,请购买套餐后再继续操作',
  confirmBtn: {
    content: '购买套餐',
    bindtap({}) {
      Dialog.close();
      setTimeout(()=>{
        wx.navigateTo({
          url: '/pages/product/product-choose/index',
        });
      }, 300)
    },
  },
  cancelBtn: '取消',
};
Dialog.confirm(checkdialog);

基础库版本

No response

补充说明

加上setTimeout之后,能够正常运行,其实就是为了保证在画面跳转之前,弹窗关闭的方法能够正常执行。 有没有什么办法,可以优化一下Dialog.close()。让他能够快点执行,或者,再起基础上加个回调啥的,可以把后续的内容写在它的成功回调里面。

Zlianxin avatar Jun 13 '23 12:06 Zlianxin

👋 @Zlianxin,感谢给 TDesign 提出了 issue。 请根据 issue 模版确保背景信息的完善,我们将调查并尽快回复你。

github-actions[bot] avatar Jun 13 '23 12:06 github-actions[bot]

♥️ 有劳 @jin0209 @mcc108 尽快确认问题。 确认有效后将下一步计划和可能需要的时间回复给 @Zlianxin 。

github-actions[bot] avatar Jun 13 '23 12:06 github-actions[bot]

wx.navigateTo新开启了一个webview,在部份机型或者低版本小程序可能导致Dialog.close()并未执行完,建议在navigateTo的complete回调函数执行 Dialog.close();

const checkdialog = {
  content:
    '您在当前运营区域内没有购买该电池型号的换电套餐,请购买套餐后再继续操作',
  confirmBtn: {
    content: '购买套餐',
    bindtap({}) {
        wx.navigateTo({
          url: '/pages/product/product-choose/index',
          complete: () => {
            Dialog.close();
          },
        });
    },
  },
  cancelBtn: '取消',
};
Dialog.confirm(checkdialog);

jin0209 avatar Jun 14 '23 07:06 jin0209