赞
踩
比如我们的登录的页面是不需要加通用模板的,通过@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()
方法中进行资源清理工作,如释放订阅、取消网络请求等。根据你的具体需求,你可以根据情况进行实现。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。