我最近开始使用 Blazor,发现它是一项非常有前途的技术。
我正在制作自定义嵌套 Blazor 组件,但我似乎并没有让它按我想要的方式工作。
目标是拥有一个具有“ContentHeader”和“ContentBody”属性的“Content”组件。但是,“ContentHeader”应该是另一个具有“Title”和“ActionBar”属性的自定义组件。所需的用法如下:
<Content>
<ContentHeader>
<Title>
Title
</Title>
<ActionBar>
<button>Test button</button>
</ActionBar>
</ContentHeader>
<ContentBody>
Body
</ContentBody>
</Content>
“内容”组件:
<CascadingValue Value="this">
<div class="content-container">
@ContentHeader(Header)
<div class="content-body">
@ContentBody
</div>
</div>
</CascadingValue>
@code {
[Parameter]
public RenderFragment<ContentHeader> ContentHeader { get; set; }
[Parameter]
public RenderFragment ContentBody { get; set; }
public ContentHeader Header { get; set; }
public async Task SetContentHeader(ContentHeader contentHeader)
{
Header = contentHeader;
await InvokeAsync(StateHasChanged);
}
}
“ContentHeader”组件:
<div class="content-header">
<h3>@Title</h3>
<div class="content-header-action-bar">
@ActionBar
</div>
</div>
@code {
[CascadingParameter]
public Content Content { get; set; }
[Parameter]
public RenderFragment Title { get; set; }
[Parameter]
public RenderFragment ActionBar { get; set; }
protected override async Task OnInitializedAsync()
{
await Content.SetContentHeader(this);
await base.OnInitializedAsync();
}
}
我得到的实际渲染输出是这样的:
<div class="content-container">
<!--!-->
Title
<!--!-->
<!--!-->
<button>Test button</button>
<!--!-->
<div class="content-body">
<!--!-->
Body
</div>
</div>
似乎“ContentHeader”组件的标记被完全忽略了。<h3></h3>
“HeaderComponent”标题周围的标签丢失,按钮未放置在里面<div class="content-header-action-bar"></div>
我还注意到OnInitializedAsync
“ContentHeader”没有被触发。
我究竟做错了什么?我什至使用正确的方法吗?
提前谢谢了。
亲切的问候