总有以下的需求:
- 等待用户确认,就是有【确定】和【取消】按钮,有个标题和内容的弹框(比如:您确定要删除吗?)
- 就是告知一下,就是上面的【取消】按钮不显示(比如:保存成功!)
- 莫有按钮,几秒钟后自己消失,就是所谓的toast(比如:已完成)
- 莫有按钮,需要发送命令才能消息(比如:数据加载中)
一开始犯了经验主义错误,还想着要调用js啥的,有点头大;后来醒悟过来的,所谓显示与否,不就加一个bool的参数,然后设置true或者false吗?so easy,so方便!
一、组件(WXDialog.razor)- @if (IsShowConfirm)
- {
-
-
-
- <strong >@Title</strong>
- @Body
-
- @if (IsShowBtnCancel)
- {
- <a @onclick="()=>OnClick(false)" href="javascript:;" >取消</a>
- }
- <a @onclick="()=>OnClick(true)" href="javascript:;" >确定</a>
-
-
-
- }
- @if (IsShowToast)
- {
-
-
-
- <i ></i>
- <p >@Title</p>
-
-
- }
- @if (IsShowLoading)
- {
-
-
-
- <i ></i>
- <p >@Title</p>
-
-
- }
- @code {
- private string? Title;
- private string? Body;
- private bool IsShowConfirm;
- private bool IsShowToast;
- private bool IsShowLoading;
- private bool IsShowBtnCancel;
- private TaskCompletionSource<bool> TaskClick = default!;
- public Task<bool> ConfirmAsync(string body="您确定要删除吗?", string title = "忆客科技")
- {
- TaskClick = new TaskCompletionSource<bool>();
- IsShowConfirm = true;
- IsShowBtnCancel = true;
- Title = title;
- Body = body;
- StateHasChanged();
- return TaskClick.Task;
- }
- public Task<bool> MessageAsync(string body="保存成功!", string title = "忆客科技")
- {
- TaskClick = new TaskCompletionSource<bool>();
- IsShowConfirm = true;
- IsShowBtnCancel = false;
- Title = title;
- Body = body;
- StateHasChanged();
- return TaskClick.Task;
- }
- public void Toast(string title = "已完成", int secondsDelay = 3)
- {
- IsShowToast = true;
- Title = title;
- StateHasChanged();
- Task.Run(async () =>
- {
- await Task.Delay(secondsDelay * 1000);
- IsShowToast = false;
- StateHasChanged();
- });
- }
- public void Loading(string title = "数据加载中")
- {
- IsShowLoading = true;
- Title = title;
- StateHasChanged();
- }
- public void HideLoading()
- {
- IsShowLoading = false;
- StateHasChanged();
- }
- private void OnClick(bool result)
- {
- IsShowConfirm = false;
- TaskClick.SetResult(result);
- }
- }
复制代码 二、测试(Test.razor)- @page "/test"
- <h3>测试Dialg</h3>
- <WXDialog @ref="MessageBox" />
- <a target="_blank" href="https://www.cnblogs.com/javascript:;" @onclick="OnClickAsync">测试一下</a>
- @code {
- private WXDialog MessageBox = default!;
- private async Task OnClickAsync()
- {
- var ret = await MessageBox!.ConfirmAsync();
- await MessageBox.MessageAsync();
- MessageBox.Toast();
- MessageBox.Loading();
- await Task.Delay(2000);
- MessageBox.HideLoading();
- }
- }
复制代码 三、效果




最后
总要有最后的,最后感觉调用不是太方便,要写两行,折腾过级联参数,变成一行。不知道有没有象静态方法一样的调用方式?知道的吱一声。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |