webassmbly blazor实现多页签效果

article/2025/11/4 15:59:15

最终效果如上图。

多页签使用BlazorStrap中的BSTabGroup、BSTabList组件,内嵌绑定的BSTab:

<div><NavMenu OnShowLog="ShowLog" OnShowModel="ShowModel" />
</div>
<div class="container"><BSTabGroup ShownEvent="@Shown" @ref="tabGroup"><BSTabList>@foreach (var tabInfo in tabInfoList){<BSTab InitialSelection="@IsTabSelected(tabInfo.Item3.FullName)" Selected="@IsTabSelected(tabInfo.Item3.FullName)" id="@tabInfo.Item3.FullName"><BSTabLabel>@tabInfo.Item1@if (!tabInfo.Item1.Equals("首页")){<span>&nbsp;</span><span class="text-danger" @onclick="@(()=>CloseTab(tabInfo.Item3.FullName))">x</span>}</BSTabLabel><BSTabContent>@tabInfo.Item2</BSTabContent></BSTab>}</BSTabList><BSTabSelectedContent /></BSTabGroup>
</div>

上面第一个div创建主菜单;第二个div声明了多页签。多页签自动遍历tabInfoList中的数据,绘制界面。BSTab没有实现可关闭的效果,因此使用span定义了一个关闭小按钮,点击页签名称后的x,关闭页签。对于首页页签,不提供关闭功能,用@if做了判断。BSTabGroup封装的还是不够到位,控制过程有绑定,有也设置属性的方式。Blazor资料也比较少,开发过程中需要查看代码找解决方法。

private List<Tuple<string, RenderFragment, Type>> tabInfoList = new List<Tuple<string, RenderFragment, Type>>();//初始化的时候,添加首页页签
protected override void OnInitialized(){Storage.SetItem("environment_uri", String.Empty);Storage.SetItem("environment_uri", UriHelper.BaseUri + "api");tabInfoList.Add(new Tuple<string, RenderFragment, Type>("首页", CreateDynamicComponent(typeof(BlazorCrud.Client.Pages.Index)),typeof(BlazorCrud.Client.Pages.Index)));}void ShowModel(Tuple<string, Type> modelInfo){var tabInfo = tabInfoList.FirstOrDefault(t => t.Item3 == modelInfo.Item2);if(tabInfo != null){//找到一打开页签,则激活即可ShowLog($"打开已存在页签  {selectedModel}");tabGroup.Selected = tabGroup.Tabs[tabInfoList.IndexOf(tabInfo)];StateHasChanged();return;}tabInfoList.Add(new Tuple<string, RenderFragment, Type>(modelInfo.Item1, CreateDynamicComponent(modelInfo.Item2), modelInfo.Item2));selectedModel = modelInfo.Item2.FullName;StateHasChanged();}
//基于Blazor的渲染原理,动态创建组件的时候,传递组件的Type,绘制时自动创建组件实例,输出组件的html和css
RenderFragment CreateDynamicComponent(Type type) => builder =>{var seq = 0;builder.OpenComponent(seq, type);builder.CloseComponent();};//关闭页签,这里直接从tabInfoList中删除对应的元素即可,界面会自动刷新void CloseTab(string id){var tab = tabInfoList.FirstOrDefault(t=>t.Item3.FullName.Equals(id));if(tab != null){tabInfoList.Remove(tab);if(tabInfoList.Count > 0){ShowModel(new Tuple<string, Type>(tabInfoList.Last().Item1, tabInfoList.Last().Item3));}}}

blazor中组件间通信机制:子组件定义事件,父组件绑定响应方法。父组件引用子组件时用@ref定义子组件的名字,在代码中声明同名成员,即可得到子组件实例,直接调用子组件中的公共方法。

开发完毕发布到服务器上,需要源码中wwwroot目录、编译后的_framework目录(两者同级),请求后报错,还有一个_content目录,需要在vs调试环境下,启动程序页面,将页面另存为,获取到所有依赖文件,在根据运行错误提示,将依赖文件按要求放入_content的子目录中。即可在非iis服务器上发布成功。如浏览器提示错误,在根据错误提示,调整wwwroot、_framework、_content中文件的位置即可。

查看调试程序运行信息:右下角找到IIS Express小图标,右键,显示应用程序所在位置及url:

vs提供的发布功能:blazor客户端项目,右键,发布,发布到文件夹,即可获取到完整的目录。

 

 


http://chatgpt.dhexx.cn/article/JTNTWijh.shtml

相关文章

Vue的多页签组件

先直接看组件代码&#xff08;里面用了一些element-ui的组件&#xff0c;如果你们不用element-ui的话。可以去掉&#xff0c;自己实现&#xff09; 也可以下载Demohttps://download.csdn.net/download/rui1120119095/14155951 <template> <div class"__commo…

XSSFWorkbook导出多一个Sheet页签

问题&#xff1a;使用XSSFWorkbook导出Excel多出一个不必要Sheet页。 问题原因&#xff1a;open(FileInputStream s)打开Excel模板时会默认打开一个Sheet页&#xff08;多余的那个Sheet页&#xff09;&#xff08;该Sheet页打开顺序&#xff1a;模板第一格显示的Sheet页->模…

VUEcli3设置页签图标

vuecli3设置网页页签图标非常简单&#xff0c;三步 1.将ico格式的页签图片放置public文件夹目录下 2.在public文件夹目录下的index.html中配置页签图标 3.在vue.config.js中配置下&#xff0c;配置好了重启下项目就行了。 效果

antd-design-pro实现多页签,切换页签保留缓存,keep-alive

感谢该大佬提供的组件&#xff1a;GitHub - CJY0208/react-activation: Hack <KeepAlive /> for React react 里 keep-alive 的实现目前是黑科技&#xff0c;会有些问题 使用过程中遇到问题的话&#xff0c;可以优先看这儿 https://github.com/CJY0208/react-activatio…

【微信小程序】之自定义顶部导航页签

小程序系统提供的导航页签&#xff0c;只能设置字体&#xff0c;却不能自定义字体图片之类的&#xff0c;所以自己写了一个示例。 废话不多说&#xff0c;直接上代码 效果&#xff1a; app.js onLaunch: function() {wx.getSystemInfo({success: e > {this.globalData.S…

ABAP:多页签的选择屏幕

在程序中创建一个100屏幕&#xff0c;然后设定子屏幕区域&#xff0c;可通过屏幕号指定页签&#xff0c;让选择屏幕更多样式&#xff0c;效果如下图&#xff1a; 实现方式如下 定义不同的选择屏幕 * 基本条件屏幕 SELECTION-SCREEN BEGIN OF SCREEN 1100 AS SUBSCREEN. SELE…

【实战】1096- React 中后台系统多页签实现

在中后台管理类系统中&#xff0c;多页签的需求非常普遍&#xff0c;用户常常需要在多个页签内跳转&#xff0c;比如填写表单时去查询某个列表获取一些字段信息再回到表单页面填写。这样的需求在 Vue 中使用 keep-alive 即可实现&#xff0c;但是在 React 中&#xff0c;React …

多种方式带你玩转 javascript 实现关闭浏览器页签

你知道的越多&#xff0c;你不知道的越多 点赞再看&#xff0c;养成习惯 如果您有疑问或者见解&#xff0c;或者没有积分想获取项目&#xff0c;欢迎指教&#xff1a; 企鹅&#xff1a;869192208 文章目录 前言方法一方法二方法三方法四方法五方法六附录 前言 近日&#xff0c…

vue 后台系统中多页面标签

在后台开发中&#xff0c;常用一种页面标签工具&#xff0c;每次点击菜单栏时&#xff0c;会在页面区域上方增加一个【标签页】如下图&#xff0c;可关闭&#xff0c;可切换页面等功能&#xff0c;常见于后台管理系统中。 以前&#xff0c;我以为这个是利用tabs组件开发的&…

js关闭浏览器页签

兼容性 js实现 function closeWebPage(){if (navigator.userAgent.indexOf("MSIE") > 0) {if (navigator.userAgent.indexOf("MSIE 6.0") > 0) {window.opener null;window.close();}else {window.open(, _top);window.top.close();}}else if (nav…

layui————一个页面展示两个页签

html页面 <!DOCTYPE html> <html> <head><meta charset"utf-8"><link rel"stylesheet" href"../../../build/css/base.css" media"all"> </head> <body> <div class"layui-tab la…

SAP BP屏幕增强页签

导语&#xff1a;最近收到了BP的需求&#xff0c;要增加页签&#xff0c;找了一些资料&#xff0c;发现BP的增强页签可是真麻烦啊&#xff0c;下面把我梳理出来的分享一下。 &#x1f449;【增强记录清单…】 需求&#xff1a; 需求是在供应商界面增加一个页签&#xff0c;用…

修改浏览器页签名称

第一种若是整个系统要统一修改为一个名称 在public文件夹下index.html下直接修改或者在相应配置文件package.json或者其他&#xff08;看项目配置&#xff09; 第二种某一个路由或者菜单页签不一样的名称 可以配置到后置路由中或者组件内 语句为:document.title 测试

vue实现tagsview多页签导航功能

文章目录 前言一、效果图二、实现思路1. 新建 tags-view.js2. 在Vuex里面引入 tags-view.js3. 新建 tabsView 组件4. 新建 ScrollPane 组件5. 引入 tabsView 组件6. 使用 keep-alive 组件&#xff0c;进行页签的缓存 总结 前言 基本上后台管理系统都需要有多页签的功能&#x…

基于微前端qiankun的多页签缓存方案实践

作者&#xff1a;vivo 互联网前端团队- Tang Xiao 本文梳理了基于阿里开源微前端框架qiankun&#xff0c;实现多页签及子应用缓存的方案&#xff0c;同时还类比了多个不同方案之间的区别及优劣势&#xff0c;为使用微前端进行多页签开发的同学&#xff0c;提供一些参考。 一、…

Sublime Text的命令行工具subl

在sublime的安装目录下有个subl.exe&#xff0c;是sublime编辑器为用户提供的命令行工具。 修改Windows系统的环境变量&#xff0c;将sublime的安装路径添加到环境变量里&#xff1b; 打开win的命令行提示符程序&#xff0c;输入subl -version,看到结果如下图所示&#xff1a;…

Macbook Pro下安装subl命令,快速使用sublime打开代码

一、使用背景 我在macbook pro电脑上经常使用编辑器直接打开代码&#xff0c;我也经常用iterm2的一些快捷命令操作目录和查看文件。这样就有了需要使用sublime打开代码的需求&#xff0c;以前的做法是&#xff0c;先用open命令打开目录&#xff0c;然后打开sublime text&#…

sublime安装以及配置

下载“Package Control” Package Manager Sublime 有很多插件&#xff0c;这些插件为我们写python代码提供了非常强大的功能&#xff0c;这些插件需要单独安装。 而安装这些插件最方便的方法就是通过Package Control的插件&#xff0c;这其实就是一个插件管理器&#xff0c;帮…

subline的使用

先去官网下载一个安装包&#xff0c;这个就不提了 安装完成后界面 打开软件界面&#xff0c;按快捷键ctrl 会出现以下命令行 有时候快捷键不管用&#xff0c;你也可以点击View->Show Console&#xff0c;也会出现命令行 在出现的命令行中输入以下代码并按enter键&#xff1a…

Sublime 替换和查找的方法

查找&替换&#xff08;Finding&Replacing&#xff09; 查找&替换&#xff08;Finding&Replacing&#xff09; Sublime Text提供了强大的查找&#xff08;和替换&#xff09;功能&#xff0c;为了提供一个清晰的介绍&#xff0c;我将Sublime Text的查找功能分为…