首页 > 其他分享 >从零开始Blazor Server(12)--编辑菜单

从零开始Blazor Server(12)--编辑菜单

时间:2022-08-22 10:47:43浏览次数:88  
标签:Task -- Server TreeNodeConverter 12 arg OnTreeExpand Children 菜单

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


这个系列也快要结束了,目前规划再有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

标签:Task,--,Server,TreeNodeConverter,12,arg,OnTreeExpand,Children,菜单
From: https://www.cnblogs.com/j4587698/p/16612038.html

相关文章

  • Python-09_02函数参数类型、函数嵌套
    1、Python函数参数类型:必备参数、关键字参数、缺省参数、任意个数参数。必备参数须以正确的顺序传入函数,也叫做位置参数,即参数是通过位置进行匹配的,从左到右,依次进行匹配,......
  • 搭建简易 nuget 私服仓库
    一、前言在上一篇随笔中,我向大家介绍了如何制作自己的nuget包,并没有向大家介绍如何发布制作好的包,今天就继续向大家介绍如何搭建一个简易的nuget私有仓库,并上传自......
  • 220. 存在重复元素 III
     思路难度中等645收藏分享切换为英文接收动态反馈给你一个整数数组 nums 和两个整数 k 和 t 。请你判断是否存在 两个不同下标 i 和 j,使得 abs(nums[i......
  • Java企业级开发中异常处理的问题
    在企业级开发中,异常的处理和学习中的异常处理差别还是挺大的;在学习中我们了解的是异常的分类和处理异常的方法,而在真实工作中我们要注重异常处理是否得当,因为不得当的异......
  • 清除maven残留下的".lastUpdate"文件
    maven工程中,若存在.lastUpdated文件,表示该文件下载失败并不会再重新下载,所以往往要把这种文件删除才能重新下载;以下是遍历所有本地仓库中存在的lastUpdated文件并删除 ......
  • 啊,我多快乐!
    如果我的家乡是一片大海,我就是一条小鱼,我游啊游,我多快乐!如果我的家乡是一条大路,我就是一辆汽车,我跑啊跑,我多快乐!如果我的家乡是一棵大树,我就是一片树叶,我摇啊摇,我多快乐!......
  • 01-springcloud学习记录
    SOA架构与微服务区别微服务拆分更加详细,主要以远程相互调用完成业务功能。SOA也是业务拆分,但一个模块内仍然有多个相近业务相互依赖。RestfulAPI是一种软件设计风......
  • Mac设置外网访问本地项目
    》官网地址:https://ngrok.com/download步骤(官网基本已经说明了步骤,但还不完善,以下为亲测步骤):下载并注册账号打开终端,进入ngrok.zip所在文件夹(方法:输入cd,将指定文件夹拉......
  • JAVA---04
    第四天1.Java方法什么是方法方法是语句的集合,它们在一起执行一个功能方法是解决一类问题的步骤的有序组合方法包含于类或对象中......
  • Apache HttpClient 5 使用详细教程
    点赞再看,动力无限。微信搜「程序猿阿朗」。本文Github.com/niumoo/JavaNotes和未读代码博客已经收录,有很多知识点和系列文章。超文本传输协议(HTTP)可能是当今......