Blazor 子组件交互例子

源码

子组件 SwitchBar.razor

复制代码
@using Microsoft.Extensions.Logging
@inject ILogger<Index> Logger

<div style="@ClassString" @onclick="OnClick">
    @ChildContent
</div>


@code {

    [Parameter]
    public RenderFragment? ChildContent { get; set; }

    [Parameter]
    public int Value { get; set; }

    [Parameter]
    public EventCallback<int> ValueChanged { get; set; }

    [Parameter]
    public EventCallback<bool> Initiated { get; set; }

    private string? ClassString =>  Value<5? "height:100px;color:red;" : "height:100px;color:green;";

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {

        if (firstRender)
        {
            await Task.Delay(2000); 
            await Initiated.InvokeAsync(true);
        }
    }

    private async Task OnClick()
    {
        Value ++;
        if (ValueChanged.HasDelegate)
        {
            await ValueChanged.InvokeAsync(Value);
        }
    }
}

主组件页面 SwitchBarDemo.razor

复制代码
@page "/SwitchBarDemo"

@using Microsoft.Extensions.Logging
@inject ILogger<Index> Logger

<SwitchBar ValueChanged="OnValueChanged" Initiated="OnInitiated">
    <div>我是子组件1内容, 点击++</div>
</SwitchBar>

@*<SwitchBar ValueChanged="OnValueChanged">
    <div>我是子组件2内容</div>
</SwitchBar>*@

<div style="@ClassString">
    <h3>主组件</h3>
    @message @Value

    @for (int i = 0; i < Value2; i++)
    {
        <div>渲染 Table</div>
    } 

</div>

@code {
    [Parameter]
    public bool Value { get; set; }

    int Value2;

    string message = "我是主组件内容";

    private string? ClassString => Value ? "height:200px;color:red;" : "height:100px;color:green;";

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {

        if (firstRender)
        {
            //message += "主组件加载";
            //StateHasChanged();

            //await Task.Delay(1000);
            //message += ",主组件加载完成";
            //StateHasChanged();
        }
    }

    private async Task OnInitiated(bool val)
    {
        message += ",子组件加载完成(查询角色)";
        StateHasChanged();
        Value2 = 2;
        Value = val;
        await Task.Delay(1000);
        StateHasChanged();
    }

    private Task OnValueChanged(int val)
    {
        Value2= val;
        message += "子组件数据变化";
        StateHasChanged();
        return Task.CompletedTask;
    }
}

运行效果

相关推荐
gis分享者1 小时前
学习threejs,打造交互式花卉生成器
交互·threejs·生成·shadermaterial·花卉·planegeometry
ZH_1 02151 小时前
Qt-ui界面
ui
猫头虎1 天前
OpenAI发布构建AI智能体的实践指南:实用框架、设计模式与最佳实践解析
人工智能·设计模式·开源·aigc·交互·pip·ai-native
Stringzhua1 天前
ElementUi【饿了么ui】
前端·ui·elementui
啊森要自信1 天前
【GUI自动化测试】Python 自动化测试框架 pytest 全面指南:基础语法、核心特性(参数化 / Fixture)及项目实操
开发语言·python·ui·单元测试·pytest
Cloud Traveler1 天前
【征文计划】Rokid CXR-M SDK全解析:从设备连接到语音交互的AR协同开发指南
ar·交互
程序员正茂2 天前
Unity3d中Tab控件的实现
ui·unity·tab·控件
@PHARAOH2 天前
WHAT - 前端性能指标(交互和响应性能指标)
前端·交互
jz_ddk2 天前
[LVGL] 从0开始,学LVGL:基础构建篇 - 掌握UI的核心构建块
linux·网络协议·ui·rpc·嵌入式·gui·lvgl
Rhys..2 天前
python自动化中(包括UI自动化和API自动化)env的作用和使用
python·ui·自动化