如果出现错误,请保留警告框而不关闭

Posted

技术标签:

【中文标题】如果出现错误,请保留警告框而不关闭【英文标题】:Keep the the alert box without dismiss if there is an error 【发布时间】:2019-05-14 14:07:41 【问题描述】:

这只是一个带有单选按钮的警报框。除了一件事,一切都很好。也就是说,如果出现错误,我无法保留警报框,直到用户输入正确的数据。根据the doc,我使用了return false 功能。但还没有运气。有什么线索吗?

Note: 如果输入为text boxes,则可以正常工作。这里我需要单选按钮。

const allApiKeys = await this.apiKeySqliteProvider.getAllApiKeys();
            const alert = this.alertCtrl.create();
            alert.setTitle('Select Api Key');
            forEach(allApiKeys, (apiKey: ApiKey) => 
              alert.addInput(
                type: 'radio',
                label: apiKey.name,
                value: apiKey.key,
                checked: false
              );
            );
            alert.addButton(
              text: 'Cancel',
              role: 'cancel',
              handler: data => 
                this.loading.dismissLoader(loading);
              
            );
            alert.addButton(
              text: 'OK',
              handler: data => 
                let navTransition = alert.dismiss();
                navTransition.then(() => 
                 if (data == null) 
                    this.showToastProvider.showErrorToast("Invalid API Key");
                    this.loading.dismissLoader(loading);
                    return false;
                   
                );
                return false;
              
            );
            alert.present();
           

【问题讨论】:

"return false" 不是实际问题。您正在调用 alert.dismiss,这就是问题所在。如果您不想隐藏警报,则应将关闭代码移至 else 块中。 【参考方案1】:

return false 不是实际问题。你打电话给alert.dismiss,这就是问题所在。如果您不想隐藏警报,则应将 dismiss 代码移至 else 块内。

请将您的代码更改为以下

 const allApiKeys = await this.apiKeySqliteProvider.getAllApiKeys();
                const alert = this.alertCtrl.create();
                alert.setTitle('Select Api Key');
                forEach(allApiKeys, (apiKey: ApiKey) => 
                  alert.addInput(
                    type: 'radio',
                    label: apiKey.name,
                    value: apiKey.key,
                    checked: false
                  );
                );
                alert.addButton(
                  text: 'Cancel',
                  role: 'cancel',
                  handler: data => 
                    this.loading.dismissLoader(loading);
                  
                );
                alert.addButton(
                  text: 'OK',
                  handler: data => 
                      if (data == null) 
                        this.showToastProvider.showErrorToast("Invalid API Key");
                        this.loading.dismissLoader(loading);
                        return false;
                      

                      // you don't need else here as by default it will hide alert
                  
                );
                alert.present();
               

【讨论】:

这是我犯的一个非常基本的错误。非常感谢您向我展示它。 任何时候 :) 很高兴我帮助了 :)

以上是关于如果出现错误,请保留警告框而不关闭的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MS ACCESS 中打开定时消息框而不创建其他窗口

Vue警告:渲染错误:“TypeError:路由未定义”[关闭]

警告:函数的隐式声明

警告:函数的隐式声明

Android webview onReceivedError()不起作用

如果设置 CUDA VISIBLE DEVICE,则会出现训练错误 [关闭]