[Blazor WebAssembly] 学习随笔——组件1.微信弹框(WXDialog) ...

打印 上一主题 下一主题

主题 1073|帖子 1073|积分 3219

总有以下的需求:

  • 等待用户确认,就是有【确定】和【取消】按钮,有个标题和内容的弹框(比如:您确定要删除吗?)
  • 就是告知一下,就是上面的【取消】按钮不显示(比如:保存成功!)
  • 莫有按钮,几秒钟后自己消失,就是所谓的toast(比如:已完成)
  • 莫有按钮,需要发送命令才能消息(比如:数据加载中)
一开始犯了经验主义错误,还想着要调用js啥的,有点头大;后来醒悟过来的,所谓显示与否,不就加一个bool的参数,然后设置true或者false吗?so easy,so方便!
一、组件(WXDialog.razor)
  1. @if (IsShowConfirm)
  2. {
  3.    
  4.         
  5.         
  6.             <strong >@Title</strong>
  7.             @Body
  8.             
  9.                 @if (IsShowBtnCancel)
  10.                 {
  11.                     <a @onclick="()=>OnClick(false)" href="javascript:;" >取消</a>
  12.                 }
  13.                 <a @onclick="()=>OnClick(true)" href="javascript:;" >确定</a>
  14.             
  15.         
  16.    
  17. }
  18. @if (IsShowToast)
  19. {
  20.    
  21.         
  22.         
  23.             <i ></i>
  24.             <p >@Title</p>
  25.         
  26.    
  27. }
  28. @if (IsShowLoading)
  29. {
  30.    
  31.         
  32.         
  33.             <i ></i>
  34.             <p >@Title</p>
  35.         
  36.    
  37. }
  38. @code {
  39.     private string? Title;
  40.     private string? Body;
  41.     private bool IsShowConfirm;
  42.     private bool IsShowToast;
  43.     private bool IsShowLoading;
  44.     private bool IsShowBtnCancel;
  45.     private TaskCompletionSource<bool> TaskClick = default!;
  46.     public Task<bool> ConfirmAsync(string body="您确定要删除吗?", string title = "忆客科技")
  47.     {
  48.         TaskClick = new TaskCompletionSource<bool>();
  49.         IsShowConfirm = true;
  50.         IsShowBtnCancel = true;
  51.         Title = title;
  52.         Body = body;
  53.         StateHasChanged();
  54.         return TaskClick.Task;
  55.     }
  56.     public Task<bool> MessageAsync(string body="保存成功!", string title = "忆客科技")
  57.     {
  58.         TaskClick = new TaskCompletionSource<bool>();
  59.         IsShowConfirm = true;
  60.         IsShowBtnCancel = false;
  61.         Title = title;
  62.         Body = body;
  63.         StateHasChanged();
  64.         return TaskClick.Task;
  65.     }
  66.     public void Toast(string title = "已完成", int secondsDelay = 3)
  67.     {
  68.         IsShowToast = true;
  69.         Title = title;
  70.         StateHasChanged();
  71.         Task.Run(async () =>
  72.         {
  73.             await Task.Delay(secondsDelay * 1000);
  74.             IsShowToast = false;
  75.             StateHasChanged();
  76.         });
  77.     }
  78.     public void Loading(string title = "数据加载中")
  79.     {
  80.         IsShowLoading = true;
  81.         Title = title;
  82.         StateHasChanged();
  83.     }
  84.     public void HideLoading()
  85.     {
  86.         IsShowLoading = false;
  87.         StateHasChanged();
  88.     }
  89.     private void OnClick(bool result)
  90.     {
  91.         IsShowConfirm = false;
  92.         TaskClick.SetResult(result);
  93.     }
  94. }
复制代码
二、测试(Test.razor)
  1. @page "/test"
  2. <h3>测试Dialg</h3>
  3. <WXDialog @ref="MessageBox" />
  4. <a target="_blank" href="https://www.cnblogs.com/javascript:;" @onclick="OnClickAsync">测试一下</a>
  5. @code {
  6.     private WXDialog MessageBox = default!;
  7.     private async Task OnClickAsync()
  8.     {
  9.         var ret = await MessageBox!.ConfirmAsync();
  10.         await MessageBox.MessageAsync();
  11.         MessageBox.Toast();
  12.         MessageBox.Loading();
  13.         await Task.Delay(2000);
  14.         MessageBox.HideLoading();
  15.     }
  16. }
复制代码
三、效果




最后
总要有最后的,最后感觉调用不是太方便,要写两行,折腾过级联参数,变成一行。不知道有没有象静态方法一样的调用方式?知道的吱一声。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表