首页 > 其他分享 >[Blazor WebAssembly] 学习随笔——组件1.微信弹框(WXDialog)

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

时间:2024-02-12 20:33:16浏览次数:26  
标签:WebAssembly Task string Title 微信 title private 弹框 true

总有以下的需求:

  1. 等待用户确认,就是有【确定】和【取消】按钮,有个标题和内容的弹框(比如:您确定要删除吗?)
  2. 就是告知一下,就是上面的【取消】按钮不显示(比如:保存成功!)
  3. 莫有按钮,几秒钟后自己消失,就是所谓的toast(比如:已完成)
  4. 莫有按钮,需要发送命令才能消息(比如:数据加载中)

一开始犯了经验主义错误,还想着要调用js啥的,有点头大;后来醒悟过来的,所谓显示与否,不就加一个bool的参数,然后设置true或者false吗?so easy,so方便!

一、组件(WXDialog.razor)

@if (IsShowConfirm)
{
    <div class="js_dialog" style="opacity: 1;">
        <div class="weui-mask"></div>
        <div class="weui-dialog">
            <div class="weui-dialog__hd"><strong class="weui-dialog__title">@Title</strong></div>
            <div class="weui-dialog__bd">@Body</div>
            <div class="weui-dialog__ft">
                @if (IsShowBtnCancel)
                {
                    <a @onclick="()=>OnClick(false)" href="javascript:;" class="weui-dialog__btn weui-dialog__btn_default">取消</a>
                }
                <a @onclick="()=>OnClick(true)" href="javascript:;" class="weui-dialog__btn weui-dialog__btn_primary">确定</a>
            </div>
        </div>
    </div>
}
@if (IsShowToast)
{
    <div style="opacity: 1;">
        <div class="weui-mask_transparent"></div>
        <div class="weui-toast">
            <i class="weui-icon-success-no-circle weui-icon_toast"></i>
            <p class="weui-toast__content">@Title</p>
        </div>
    </div>

}
@if (IsShowLoading)
{
    <div style="opacity: 1;">
        <div class="weui-mask_transparent"></div>
        <div class="weui-toast">
            <i class="weui-loading weui-icon_toast"></i>
            <p class="weui-toast__content">@Title</p>
        </div>
    </div>

}


@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 href="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();

    }
}

三、效果




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

标签:WebAssembly,Task,string,Title,微信,title,private,弹框,true
From: https://www.cnblogs.com/catzhou/p/18014102

相关文章

  • ruffle 基于webassembly 的flash player 模拟器
    ruffle基于webassembly的flashplayer模拟器包含的特性安全 基于rust以及wasm避免一些安全问题安装简单免费开源说明官方还提供了一个demo站点可以快速体验功能参考资料https://github.com/ruffle-rs/rufflehttps://ruffle.rs/https://ruffle.rs/downloads#websi......
  • extism 基于rust 开发的强大webassembly 框架
    extism基于rust开发的强大webassembly框架包含的特性使用简单 可以方便的开发基于webassembly的插件系统安全方便运行 包含了灵活的架构可以可以方便与多种语言进行通信(基本覆盖了主流的编程语言)说明目前基于webassembly的语言集成热度是越来越高了,webassembly很值......
  • 微信小程序(二) | 了解页面结构与组件
    ......
  • 微信小程序(一) | 注册与安装
    ......
  • [Blazor WebAssembly] 学习随笔——身份验证
    最近在折腾微信相关的开发,包括公众号、企业微信内部应用、企业微信第三方开发。基于Razor方式写了:企业微信内部应用的类库企业微信第三方应用的类库公众号的类库一个统一管理公众号、企业微信内部应用和第三方应用有关授权、Token之类的应用。然后准备写一个开源的简单的酒......
  • 调用大模型实现微信自动回复新年祝福类信息
    调用大模型实现微信自动回复新年祝福类信息一、实现功能通过uiautomation实现自动读取微信(电脑版)未读消息根据关键字判断是否是新春祝福类信息,如果是,调用智谱AI模型,根据接收到的消息,利用模型生成回复内容自动将回复内容发送出去 二、实现效果 三、实现代码fromuiau......
  • 微信支付服务商,商户快速进件,减少工作量
    大家好,我是小悟服务商拓展特约商户,人工录入大量商户资料,耗时耗力。商户对标准费率不满意,无法说服商户先签约再帮其调整费率。为了减少服务商工作量,服务商快速进件工具来了,分为移动端和管理端。用好技术,让经营更高效。移动端包括四大模块,主体资料、经营资料、法人资料和银行账户。点......
  • C#WPF开发电脑进入锁屏状态退出微信的程序
    前因:当电脑登了微信,手机微信通知设置了”windows微信已登录,手机通知关闭“,这个时候手机的系统通知栏不会通知直接原因:我下班回家,个人习惯是直接锁屏不关机,经常忘记退出微信,然后导致回到家接收不到微信通知,漏掉很多朋友的消息结果:所以想开发一个程序,当我电脑锁屏后直接关掉微信,让......
  • 微信小程序 Path2D 不支持 svg 路径的解决办法
    问题开发一个微信小程序项目的时候需要用到Path2D这个对象,但是发现小程序的Path2D对象不支持实例化的时候直接传入'svgpath',导致下面的代码运行的时候报错(浏览器中可运行)#其它代码(省略)...//核心代码letp=newPath2D("M1010h80v80h-80Z");//微信小程序中会......
  • flutter3+dart3聊天室|Flutter3跨平台仿微信App语音聊天/朋友圈
    全新研发flutter3+dart3+photo_view跨多端仿微信App界面聊天Flutter3-Chat。flutter3-chat基于最新跨全平台技术flutter3+dart3+material-design+shared_preferences+easy_refresh构建的仿微信APP界面聊天实例项目。实现发送图文表情消息/gif大图、长按仿微信语音操作面板、图片......