blazor - 如何将值从页面传递到 Blazor 中的布局?
问题描述
我有一个布局 ( MainLayout.razor
),它有一个名为ShowFooter
. 在某些页面上,我希望能够将该标志设置为true
,而另一些页面则设置为false
。
我还没有找到任何关于页面(即带有路由的组件)如何与其布局进行通信的明确说明。如何/应该在 Blazor 中做到这一点?
注意:您可能建议使用两种布局,一种有页脚,一种没有页脚,但这并不能真正解决我的问题,我希望能够在同一页面上的不同时间显示和隐藏页脚。另外,这只是需要在布局和页面之间进行通信的一种情况。还有无数其他的。
解决方案
最简单的方法是在 MainLaout 组件中定义一个名为 ShowFooter 的公共布尔属性,如下所示:
public bool ShowFooter {get; set;}
并将 MainLaout 组件的引用级联到给定组件,方法是将标记包装在CascadingValue
其 Value 属性设置为 的组件中this
,如下所示:
@inherits LayoutComponentBase
<CascadingValue Value="this">
<div class="sidebar">
<NavMenu />
</div>
<div class="main">
<div class="content px-4">
@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;
}
}
推荐阅读
- amazon-web-services - 从 AWS S3 + Cloudfront 获取文件在 Safari 上工作,但在 Chrome 和 Firefox 上不工作(404 跨源时未找到严格源)
- php - 当我使用选项卡或尝试使用空格时,Cloud9 上会显示 AWS 上的 EC2 实例的绿色空格?
- laravel - 子域重新路由到域
- php - 如何填充两个下拉列表,一个取决于另一个携带 json
- java - 将 PEM 转换为 PKCS12 并导入到 Java 密钥库
- python - Python 文本文件
- r - Sparklyr 连接错误: spark_connect_gateway 中的错误(gatewayAddress,gatewayPort,sessionId,:本地主机中的网关:8880 没有响应
- php - Laravelsai - 如何在 VSCode 中使用 windows docker 桌面进行调试
- ios - 如何模拟多台计算机以使用相同的 iOS 应用程序/项目/存储库?
- algorithm - 多个SETS的在线压缩算法?