欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > Blazor Webassembly多标签页实现非iframe的实现

Blazor Webassembly多标签页实现非iframe的实现

2025/6/29 7:34:20 来源:https://blog.csdn.net/a4610a/article/details/140611246  浏览:    关键词:Blazor Webassembly多标签页实现非iframe的实现

前面用iframe实现了多标签页,这次是不用iframe实现的多标签页.参考了一下Ant Design Blazor.
基本功能已经都实现了不论是标签滚动、激活、左移、右移、关闭其他,还是在内容页跳转、新增、关闭标签都有实现。
已经可以用来做实际项目
源码地址: https://github.com/liningit/BlazorWebassemblyMultiPagesTabNoIframe
实现原理是新建一个类继承RouteView,在此类里面的Render方法中可以通过RouteData获取当前路由对应的对象.然后生成RenderFragment.
然后将其保存到List中,然后循环显示出来.对于未激活的通过display:none隐藏就可以了,这样哪怕切换标签状态也是保存的并不会刷新

    public class ReuseTabsRouteView : RouteView{[Inject]public TabSetTool TabSetTool { get; set; }[Inject]public NavigationManager Navmgr { get; set; }protected override void Render(RenderTreeBuilder builder){var layoutType = RouteData.PageType.GetCustomAttribute<LayoutAttribute>()?.LayoutType ?? DefaultLayout;var body = CreateBody(RouteData, Navmgr.Uri);builder.OpenComponent<CascadingValue<ReuseTabsRouteView>>(0);builder.AddAttribute(1, "Name", "RouteView");builder.AddAttribute(2, "Value", this);builder.AddAttribute(3, "ChildContent", (RenderFragment)(b =>{b.OpenComponent(20, layoutType);b.AddAttribute(21, "Body", body);b.CloseComponent();}));builder.CloseComponent();var url = "/" + Navmgr.ToBaseRelativePath(Navmgr.Uri);if (url != "/#"){var selTab = TabSetTool.Pages.FirstOrDefault(m => m.Url == url && (m.Title == TabSetTool.Title || string.IsNullOrEmpty(m.Title)));if (selTab == null){TabSetTool.Pages.Add(new Tab{Body = body,Url = url,Title = TabSetTool.Title,IsActive = true,});}else{selTab.Title = TabSetTool.Title;selTab.Body = body;selTab.IsActive = true;}}}private RenderFragment CreateBody(RouteData routeData, string url){return builder =>{builder.OpenComponent(0, routeData.PageType);foreach (var routeValue in routeData.RouteValues){builder.AddAttribute(1, routeValue.Key, routeValue.Value);}builder.CloseComponent();};}}

App.razor中将RouteView改成ReuseTabsRouteView.

另外要注意TabSet中一定要有

[CascadingParameter(Name = "RouteView")]
public ReuseTabsRouteView RouteView { get; set; }

这两句,要不然页面会不更新

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词