上个星期有点事,导致没法及时更新。现在我们继续更我们的从零开始系列。

这个系列也快要结束了,目前规划再有2-3篇,就结束了。

今天我们来说编辑菜单的问题,说实话菜单这种东西,你不更新代码加个页面,单独加个菜单没啥意义。除非你要跳转到其他的网站去。

但是呢,你没有这玩意感觉又不太完整,就加上吧。

菜单管理里,我们主要来说一下table的树形的处理。

先上代码:

<Table TItem="MenuEntity" IsBordered="true" ShowAddButton="true" ShowToolbar="true"
ShowExtendButtons="true" IsTree="true" TreeNodeConverter="TreeNodeConverter"
OnTreeExpand="OnTreeExpand" OnQueryAsync="OnQueryAsync" OnSaveAsync="OnSaveAsync">
<TableColumns>
<TableColumn @bind-Field="@context.Name"></TableColumn>
<TableColumn @bind-Field="@context.Icon"></TableColumn>
<TableColumn @bind-Field="@context.Url"></TableColumn>
<TableColumn @bind-Field="@context.ParentId" Visible="false" Lookup="Menus"></TableColumn>
</TableColumns>
</Table>

这里由于一般来说,一级菜单都不会太多,我就不做菜单分页了,没啥意义。

这里主要说一下TreeNodeConverterOnTreeExpand。其中在开始的时候,会调用TreeNodeConverter来将内容转换为IEnumerable<TableTreeNode<MenuEntity>>

代码如下:

private Task<IEnumerable<TableTreeNode<MenuEntity>>> TreeNodeConverter(IEnumerable<MenuEntity> arg)
{
return Task.FromResult(arg.Select(x => new TableTreeNode<MenuEntity>(x)
{
HasChildren = x.Children is {Count: > 0 }
}));
}

这里我写的很简单,就处理了一下是否有子项。并没有递归获取下一级,这里也算偷懒吧。

如果你想在初始阶段就展开整个树的话,那么这里一定要在之类递归把所有的内容转换完毕,因为你单独写IsExpand的话,并不会调用OnTreeExpand获取下一级节点,只会图标变为展开状态。这里后期可能会改变。

OnTreeExpand也很简单

    private Task<IEnumerable<TableTreeNode<MenuEntity>>> OnTreeExpand(MenuEntity arg)
{
return Task.FromResult(arg.Children!.Select(x => new TableTreeNode<MenuEntity>(x)
{
HasChildren = x.Children is {Count: > 0 }
}));

TreeNodeConverter是一样的,只是把它的子项拿出来了而已。

剩下的都是之前说过的内容。就不在说了。这里还有一个要注意的地方就是选择父级菜单的时候按说应该把自己和自己的子菜单屏蔽掉,因为你设置自己的父级是自己的子菜单,这样就找不到这个菜单了。我也是偷懒,木有做。

代码在https://github.com/j4587698/BlazorLearn,分支lesson12

从零开始Blazor Server(12)--编辑菜单的更多相关文章

  1. 从零开始Blazor Server(8)--增加菜单以及调整位置

    这篇干啥 这篇文章主要是把前面的一些东西稍微调整一下,使其更适合后面的内容. 主要是两个事,一个是把原来的PermissionEntity直接变成MenuEntity,直接让最后一级是菜单,这样后面就 ...

  2. 从零开始Blazor Server(10)--编辑角色

    例图 目前的样式是这样的: 其中角色在一个table里,然后可以增删改查,并且可以给指定的用户分配权限. 创建文件 首先我们在Pages/Admin目录下新建一个Role.razor.因为我们的Adm ...

  3. 从零开始Blazor Server(11)--编辑用户

    用户编辑和角色编辑几乎一模一样,这里先直接贴代码. @page "/user" @using BlazorLearn.Entity @using Furion.DataEncryp ...

  4. 从零开始Blazor Server(3)--添加cookie授权

    认证方式简述 Blazor Server微软官方还是推荐直接使用Cookie授权,因为本来Blazor Server就是前后端不分离的.不存在Cookie跨域等一系列问题. 只要不是使用SSO之类的统 ...

  5. 从零开始Blazor Server(15)--总结

    我们用了14篇文章,基本上把一个后台管理系统需要的UI部分都说的差不多了.所以这套文章也该到了结束的时候了. 这里面有很多问题,比如我们直接使用UI来拉数据库信息而没有使用service,再比如我们大 ...

  6. 从零开始Blazor Server(1)--项目搭建

    项目介绍 本次项目准备搭建一个使用Furion框架,Blazor的UI使用BootstrapBlazor.数据库ORM使用Freesql的后台管理系统. 目前的规划是实现简单的注册,登录.增加管理员跟 ...

  7. 从零开始Blazor Server(6)--基于策略的权限验证

    写这个的原因 现在BootstrapBlazor处于大更新时期,Menu组件要改为泛型模式. 本来我们的这一篇应该是把Layout改了,但是改Layout肯定要涉及到菜单,如果现在写了呢,就进入一个发 ...

  8. 从零开始Blazor Server(4)--登录系统

    说明 上一篇文章中我们添加了Cookie授权,可以跳转到登录页了.但是并没有完成登录,今天我们来完成它. 我们添加Cookie授权的时候也说了,这套跟MVC一模一样,所以我们登录也是跟MVC一模一样. ...

  9. 从零开始Blazor Server(9)--修改Layout

    目前我们的MainLayout还是默认的,这里我们需要修改为BootstrapBlazor的Layout,并且处理一下菜单. 修改MainLayout BootstrapBlazor已经自带了一个La ...

随机推荐

  1. LSP原则是什么

    如果这篇文章能够帮到您,请给我一个免费的赞,谢谢QWQ! LSP原则并不难,但是地方就会把它说的很啰嗦,如果你对LSP还是感到疑惑,请往下看看. 先上代码: public class Bird { p ...

  2. c++ 快速乘

    First 在一些数学题中,两个数相乘运算很多,同时又很容易溢出,如两个 long long 相乘 今天本蒟蒻来总结一下快速乘的两种方法 1:二进制 和快速幂的原理一样,优化一个一个加的算法,复杂度\ ...

  3. vue传值的几种方式

    props:适用于 父组件 ==> 子组件 通信 由父组件传值子组件在props中接收即可: (由父组件给子组件传递 函数类型 的props可实现 子组件 ==> 父组件 传递数据,较为繁 ...

  4. bootstrap 4.0 dropdown 找不到popper.js 的解决方案

    最近项目中升级bootstrap 由3.3.7版 升了4.0版本 发现 dropdown 找不到popper.js 解决办法:npm install -save popper 下载完之后,查看node ...

  5. JS:String

    String数据类型:字符串 字符串是存储字符的变量. 字符串可以是引号中(可以使用单引号或双引号)的任意文本. var a = "abc"; var b = "123& ...

  6. SpringBoot的浅浅配置和小整合

    SpringBoot的浅浅配置和小整合 本文如题,就是浅浅记录一下学习的过程中一些过程,比较简单,并没有多少深度.谢谢! SpringBoot创建 从IDEA中新建项目或者模块.注意jdk版本,一般不 ...

  7. BUUCTF-你竟然赶我走

    你竟然赶我走 首先看到这个图片没啥感觉,直接用16进制打开了.拖到最下面果然有flag flag{stego_is_s0_bor1ing}

  8. hive完整搭建

    安装 MySQL 服务的详细步骤如下: 1. 解压安装包 现在已经为大家下载好了 MySQL 5.7.25 的安装包,存放在 /root/software 目录下.首先进入此目录下,然后使用tar - ...

  9. ShardingSphere-proxy-5.0.0建立mysql读写分离的连接(六)

    一.修改配置文件config-sharding.yaml,并重启服务 # # Licensed to the Apache Software Foundation (ASF) under one or ...

  10. git 删除、合并多次commit提交记录

    合并多次记录 1. git log找到要合并的记录的数量. 2. git rebase -i HEAD~5 将最上面一个的记录选为pack,下面记录都改为s. ================= 删除 ...