翼度科技»论坛 编程开发 .net 查看内容

Blazor UI库 Bootstrap Blazor 快速上手 (v7.5.7)

2

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
最近组件库更新比较频繁,有些同学感觉有点迷茫,就着今天刚上了张老板一节课立马撸个新的上手教程回馈社区,  ;->
1.新建工程b18QuickStartv757,将项目添加到解决方案中
  1. dotnet new blazorserver -o b18QuickStartv757
  2. dotnet sln add b18QuickStartv757/b18QuickStartv757.csproj
复制代码
2.使用 nuget.org 进行 BootstrapBlazor 组件安装, FreeSql sqlite库,字体 ..
  1. dotnet add b18QuickStartv757 package BootstrapBlazor
  2. dotnet add b18QuickStartv757 package BootstrapBlazor.FontAwesome
复制代码
2.样式表和Javascript 引用

增加主题样式表到 Pages/_Host.cshtml 文件中
删除
并在下面添加两行
  1. [/code]添加 Javascript 引用到 Pages/_Host.cshtml 文件中
  2. 在  之前添加
  3. [code]
复制代码
3.添加增加命名空间引用到 _Imports.razor 文件中
  1. @using BootstrapBlazor.Components
复制代码
4.增加 BootstrapBlazorRoot 组件到 App.razor 文件中
  1. <BootstrapBlazorRoot>
  2.     <Router AppAssembly="@typeof(App).Assembly">
  3.         ...
  4.     </Router>
  5. </BootstrapBlazorRoot>
复制代码
5.添加BootstrapBlazor服务到 Program.cs 文件中

在 builder.Services.AddSingleton(); 后加入
  1. builder.Services.AddBootstrapBlazor();
复制代码
以下步骤纯属个人喜好 , 改造原版 NavMenu 组件

6. 新建 menu.js 文件

在 wwwroot 建立 modules文件夹, 新建 menu.js 文件
  1. import Data from "../_content/BootstrapBlazor/modules/data.js";
  2. import EventHandler from "../_content/BootstrapBlazor/modules/event-handler.js";
  3. export function init(id) {
  4.     var el = document.getElementById(id)
  5.     if (el === null) {
  6.         return
  7.     }
  8.     const navbar = el.querySelector('.navbar-toggler')
  9.     const menu = el.querySelector('.sidebar-content')
  10.     const nav = { navbar, menu }
  11.     Data.set(id, nav)
  12.     EventHandler.on(navbar, 'click', () => {
  13.         menu.classList.toggle('show')
  14.     })
  15.     EventHandler.on(menu, 'click', '.nav-link', e => {
  16.         const link = e.delegateTarget
  17.         const url = link.getAttribute('href');
  18.         if (url !== '#') {
  19.             menu.classList.remove('show')
  20.         }
  21.     })
  22. }
  23. export function dispose(id) {
  24.     const nav = Data.get(id)
  25.     if (nav) {
  26.         EventHandler.off(nav.navbar, 'click');
  27.         EventHandler.off(nav.menu, 'click', '.nav-link');
  28.     }
  29. }
复制代码
7. 替换 Shared\NavMenu.razor 文件
  1. @inherits BootstrapModuleComponentBase
  2. @attribute [JSModuleAutoLoader("./modules/menu.js", Relative = false)]
  3.    
  4.         <a  target="_blank" href="https://www.cnblogs.com/">Demo</a>
  5.         <button  aria-label="toggle">
  6.             
  7.         </button>
  8.    
  9.    
  10.         
  11.             <Menu Items="@Menus" IsVertical="true" IsAccordion="true" IsExpandAll="true" />
  12.         
  13.    
复制代码
8. 新建 Shared\NavMenu.razor.cs 文件
  1. using BootstrapBlazor.Components;
  2. using Microsoft.AspNetCore.Components.Routing;
  3. namespace b18QuickStartv757.Shared;
  4. public partial class NavMenu
  5. {
  6.     private IEnumerable<MenuItem> Menus { get; set; } = new List<MenuItem>
  7.     {
  8.             new MenuItem() { Text = "首页", Url = "/"  , Match = NavLinkMatch.All},
  9.             new MenuItem() { Text = "Counter", Url = "/counter" },
  10.             new MenuItem() { Text = "Fetch data", Url = "/fetchdata" },
  11.             new MenuItem() { Text = "工具" ,Items= new List<MenuItem>
  12.                 {
  13.                     new MenuItem() { Text = "Counter", Url = "/counter" },
  14.                     new MenuItem() { Text = "Fetch data", Url = "/fetchdata" },
  15.                }
  16.             },
  17.     };
  18. }
复制代码
9. 替换 Shared\MainLayout.razor 文件
  1. @inherits LayoutComponentBase
  2. @using System.Reflection
  3. <section >
  4.    
  5.         
  6.             DEMO
  7.         
  8.         <NavMenu />
  9.    
  10.    
  11.         
  12.             <Tab ClickTabToNavigation="true"
  13.                  ShowExtendButtons="true"
  14.                  ShowClose="true"
  15.                  Body=@Body />
  16.         
  17.    
  18. </section>
复制代码
10. 替换 Shared\MainLayout.razor.css 文件
  1. .layout-main .main {
  2.     background: rgba(16, 142, 233, 1);
  3.     color: #fff;
  4.     min-height: 120px;
  5.     width: 100%;
  6.     height: 100%;
  7.     display: flex;
  8.     align-items: center;
  9.     justify-content: center;
  10.     flex-flow: column;
  11. }
  12. .main {
  13.     flex: 1;
  14. }
  15. .sidebar .navbar-brand {
  16.     font-size: 1.1rem;
  17. }
  18. .sidebar .nav-item {
  19.     font-size: 0.875rem;
  20.     padding-left: 6px;
  21. }
  22.     .sidebar .nav-item a {
  23.         color: #444;
  24.         border-radius: var(--bs-border-radius);
  25.         display: flex;
  26.         align-items: center;
  27.         padding: .25rem 1.5rem;
  28.         font-weight: 400;
  29.     }
  30. .sidebar .navbar {
  31.     --bb-bg-navbar: #8548ff;
  32.     background-color: var(--bb-bg-navbar);
  33. }
  34. .sidebar .sidebar-title {
  35.     display: none;
  36. }
  37. .sidebar-text {
  38.     font-weight: 700;
  39. }
  40. .menu .nav-link.nav-table {
  41.     color: var(--bs-info);
  42.     font-weight: bold;
  43. }
  44.     .menu .nav-link.nav-table:hover {
  45.         color: unset;
  46.     }
  47. @media (max-width: 767.98px) {
  48.     .main .top-row:not(.auth) {
  49.         display: none;
  50.     }
  51.     .main .top-row.auth {
  52.         justify-content: space-between;
  53.     }
  54.     .main .top-row a, .main .top-row .btn-link {
  55.         margin-left: 0;
  56.     }
  57. }
  58. @media (min-width: 768px) {
  59.     .section {
  60.         flex-direction: row;
  61.         display: flex;
  62.     }
  63.     .sidebar {
  64.         width: var(--bs-sidebar-width);
  65.         height: calc(100vh);
  66.         position: sticky;
  67.         top: 0;
  68.         border-right: solid 1px #c0c4cc;
  69.         background-color: #f0f0f0;
  70.         display: flex;
  71.         flex-direction: column;
  72.         margin-top: calc(var(--bs-header-height)*-1);
  73.     }
  74.         .sidebar .sidebar-content {
  75.             height: calc(100vh - var(--bs-header-height));
  76.         }
  77.             .sidebar .sidebar-content.collapse {
  78.                 display: flex;
  79.                 flex-direction: column;
  80.             }
  81.         .sidebar .sidebar-title {
  82.             height: 50px;
  83.             display: flex;
  84.             align-items: center;
  85.             padding: 1rem;
  86.             border-bottom: solid 1px #c0c4cc;
  87.         }
  88.         .sidebar .scroll {
  89.             overflow-x: hidden;
  90.             max-height: calc(100% - 36px);
  91.             padding: 5px 0;
  92.         }
  93.             .sidebar .scroll .menu {
  94.                 width: var(--bs-sidebar-width);
  95.             }
  96. }
复制代码
11. Index.razor 在@page下一行添加 attribute
  1. @attribute [TabItemOption(Text = "Index")]
复制代码
12. 运行



来源:https://www.cnblogs.com/densen2014/archive/2023/04/27/17357815.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具