Blazor 根据路由判断哪些页面需要加模板,哪些不需要

比如我们的登录的页面是不需要加通用模板的,通过@if 控制 RouteView的DefaultLayout即可

<BootstrapBlazorRoot>
    <Router AppAssembly="@typeof(App).Assembly">
        <Found Context="routeData">
            <PageTitle>Title</PageTitle>
            @if (routeData.PageType == typeof(BlazorApp.Pages.Login))
            {
                <RouteView RouteData="@routeData" />
            }
            else
            {
                <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
            }

            <FocusOnNavigate RouteData="@routeData" Selector="h1" />
        </Found>
        <NotFound>
            <PageTitle>Not found</PageTitle>
            <LayoutView Layout="@typeof(MainLayout)">
                <p> 正在玩命开发中 ...</p>
            </LayoutView>
        </NotFound>
    </Router>
</BootstrapBlazorRoot>

上面的方式适合静态配置,一般页面菜单都是动态,可以用下面的方式实现

@inject DataService dataService

@implements IDisposable

@if (showTemplate)
{
    <RouteView RouteData="routeData" DefaultLayout="typeof(MainLayout)" />
}
else
{
    <RouteView RouteData="routeData" DefaultLayout="" />
}

@code {
    private bool showTemplate;
    private RouteData routeData;

    protected override async Task OnInitializedAsync()
    {
        // 从后台获取数据
        var data = await dataService.GetData();

        // 根据获取到的数据判断是否需要使用模板
        if (data.NeedsTemplate)
        {
            showTemplate = true;
        }
        else
        {
            showTemplate = false;
        }

        // 设置路由数据
        routeData = GetRouteData();

        await base.OnInitializedAsync();
    }

    private RouteData GetRouteData()
    {
        // 获取路由数据的方法(根据你的实际情况编写)

        // 返回你想要的路由数据对象
    }

    public void Dispose()
    {
        // 在需要释放资源时进行清理工作(根据你的需求进行实现)
    }
}
 

在上述示例中,我们通过 ​@inject​指令注入了一个名为 ​DataService​的服务,用于获取后台数据。在 ​OnInitializedAsync​生命周期方法中,我们通过调用 ​dataService.GetData()​方法获取数据,并根据数据的特定属性进行条件判断。根据判断结果,我们设置 ​showTemplate​变量来决定是否使用模板。

然后,我们使用 ​@if​语句根据 ​showTemplate​的值来选择性地设置 ​DefaultLayout​属性。如果 ​showTemplate​为 ​true​,则应用默认的模板布局;如果为 ​false​,则不应用任何模板。

最后,我们还定义了 ​GetRouteData()​方法来获取自定义的路由数据,并将该数据赋值给 ​routeData​变量。

请注意,在使用 ​implements IDisposable​的情况下,我们可以在 ​Dispose()​方法中进行资源清理工作,如释放订阅、取消网络请求等。根据你的具体需求,你可以根据情况进行实现。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值