如何将值从页面传递到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;
    
    }
}


以上是如何将值从页面传递到Blazor中的布局?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>