我想定义一个基本页面,所有类都应该从Blazor中派生,但在覆盖模板方面存在问题。
。
base-page.razor
@if(ShowData) { <div> @TitleTemplate </div> <div> @BodyTemplate </div> } else { <Spinner /> } @code { [Parameter] public RenderFragment HeaderTemplate {get;set;} [Parameter] public RenderFragment BodyTemplate {get;set;} protected bool ShowData {get;set; = false; }
derived-page.razor
<HeaderTemplate> some html for header here... </HeaderTemplate> <BodyTemplate> some body html here... </BodyTemplate> @code { private object Data = new(); protected override async Task OnInitializedAsync() { Data = await someService.GetData(); base.ShowData = true; StateHasChanged() } }
final应该是一个在派生页面中覆盖所有RenderFragments的页面。
我该怎么做?
感谢基本上,ComponentBase
,这个世界上使用的标准组件,并不是为了处理你想要实现的功能而设计的。
你有两个选择。
-
将必要的功能硬塞到ComponentBase中。这个答案展示了如何使用现有的
ComponentBase
构建模板- https://stackoverflow.com/a/74613188/13065781 -
构建自己的基本组件,用于处理包装器功能。这里有一个我的repo告诉你如何做到这一点- https://github.com/ShaunCurtis/Blazr.Demo.ComponentWrapper