如何将值从页面传递到Blazor中的布局?
我有一个布局 ( MainLayout.razor),它有一个名为ShowFooter. 在某些页面上,我希望能够将该标志设置为true,而将其他一些设置为false。
我还没有找到任何关于页面(即带有路由的组件)如何与其布局进行通信的明确说明。这可以/应该如何在 Blazor 中完成?
注意:您可能建议使用 2 种布局,一种有页脚,一种没有页脚,但这并不能真正解决我的问题,我希望能够在同一页面的不同时间显示和隐藏页脚。另外,这只是需要在布局和页面之间进行通信的一种情况。还有无数其他的。
回答
最简单的方法是在 MainLaout 组件中定义一个名为 ShowFooter 的公共布尔属性,如下所示:
public bool ShowFooter {get; set;}
并将 MainLaout 组件的引用级联到给定组件,方法是将标记包装在CascadingValueValue 属性设置为的组件中this,如下所示:
@inherits LayoutComponentBase
<CascadingValue Value="this">
<div>
<NavMenu />
</div>
<div>
<div>
@Body
</div>
</div>
</CascadingValue>
@code
{
public bool ShowFooter {get; set;}
protected override void OnInitialized()
{
// Put here code that checks the value of ShowFooter and acts in
// accordance with your dear wishes
}
}
Index.razor 中的用法
@code{
// Gets a reference to the MainLayout component
[CascadingParameter]
public MainLayout Layout { get; set; }
protected override void OnInitialized()
{
Layout.ShowFooter= true;
}
}