ABP之展现层(导航菜单)
基本的增删改查已经粗糙的结束了,接下来就是要方便的展示了,也就是导航菜单。在Abp中已经对导航栏的设置进行了相应的封装(Abp.Application.Navigation),可以方便我们快速的将自己开发的页面添加到首页的导航栏中。
一.添加自己的导航菜单
当我们从ABP官网下载模板的时候,项目会自动的为我们在MVC项目中的StartUp文件夹中创建一个...NavigationProvider的文件,同时会添加基本的菜单:主页、用户、租户、关于。
不但已经默认给我们创建了一个provider,而且已经给我们初始化了
看懂了模板中的菜单的定义方式和注意事项,接下就可以自定义我们的菜单
刷新一下页面,我们自定义的页面就这么轻易的创建了
二.导航菜单的具体创建流程
1. 几个重要的类
NavigationManager:菜单的和心类,这个类定义了MenuDefinition(主菜单)、NavigationConfiguration(导航菜单配置),同时调用NavigationProvider中的SetNavigation,完成菜单的初始化。
MenuDefinition:主菜单类,定义了一个List<MenuItemDefinition>,这个类存放了我们定义的菜单,同时定义了AddItem方法
从上面的源码中可以看出我们最开始自定义的导航菜单的方法就是在这里定义的。
MenuItemDefinition:子菜单,这就是我们具体的展示在页面上的菜单。它也定了一个List<MenuItemDefinition>和AddItem方法
从这边的代码中可以看出,因为子菜单中定义了List<MenuItemDefinition>,所以我们的菜单支持菜单的不断的嵌套。
NavigationConfiguration:用来存放菜单的,我们上面的MenuItemDefinition定义的全部是每个菜单项的具体信息,那么整个菜单(provider)存放在哪呢,没错,就是这。比如最上面的我们自定义的导航类StudyABPProjectNavigationProvider : NavigationProvider
NavigationProvider:这个就是用来存放菜单的自定义类需要继承的抽象类
现在总结一下:其实通过上面的几个类就可以看出我们定义的菜单的实现流程了。
首先我们创建自定义XXXProvider类继承自NavigationProvider,并在Provider中定义好MenuItemDefinition。然后将provider添加到NavigationConfiguration中。最后通过NavigationManager调用Initialize方法,在这个方法里调用每个provider的SetNavigation方法,完成菜单的定义。
等一下,现在有一个问题,在最开始我们依葫芦画瓢定义自己的菜单的时候,需要为菜单定义权限,就是说拥有权限的用户登陆才可以看到相应的菜单栏,我们的ABP系统是一个完善的具有权限管理的系统,我们上面的分析,通过NavigationManager初始化菜单,并没有与权限有什么卵的关系。那么我们每个人登陆时获取的菜单都是一样的,这不就出问题了嘛。。。。。。。。。。。。。所以还有一个重要的类需要看一下,那就是UserNavigationManager
这就比较清楚了,哈哈哈
最后一个问题,如果我们想要获取到我们定义的菜单,应该怎么做?
(1)通过NavigaitonManager(ISingleDependency单例模式)获取所有菜单,所以我们可以直接通过注入的方式获取到
(2)通过UserNavigatinManager(ITranseientDependency临时注入模式)获取指定用户的菜单,可以通过依赖注入,也可以直接new出来
ABP之展现层(导航菜单)的更多相关文章
- ABP(现代ASP.NET样板开发框架)系列之22、ABP展现层——导航栏设置
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之22.ABP展现层——导航栏设置 ABP是“ASP.NET Boilerplate Project (ASP.NE ...
- ABP之展现层(Datatables分页)
在前面的随笔中,已经介绍了ABP的增删改查的操作,但是对于查询的数据并没有进行分页,只是进行粗糙的展示,今天的随笔中将摸索进行分页展示.这里打算使用的分页插件是DataTables,这是一款比较强大的 ...
- abp的权限与导航菜单的关系
原来以为各是各的,所以就有了第一个版本.Getallmentus.然后注入了role,当然失败了.获取所有的菜单.一直在思考在什么地方设置菜单是否展示呢? 后面看了源码.才发现自己错了. UserNa ...
- ABP入门系列(6)——定义导航菜单
ABP入门系列目录--学习Abp框架之实操演练 完成了增删改查以及页面展示,这一节我们来为任务清单添加[导航菜单]. 在以往的项目中,大家可能会手动在layout页面中添加一个a标签来新增导航菜单,这 ...
- DDD开发框架ABP之导航菜单
每一个网站都会有导航菜单(通常不止一个),ASP.NET Boilerplate(后文简称ABP)提供了一种创建和使用菜单的通用架构,利用架构我们可以方便的创建菜单并显示给用户.本文主要说明菜单的创建 ...
- ABP(现代ASP.NET样板开发框架)系列之20、ABP展现层——动态生成WebApi
点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之20.ABP展现层——动态生成WebApi ABP是“ASP.NET Boilerplate Project (ASP.N ...
- ABP(现代ASP.NET样板开发框架)系列之21、ABP展现层——Javascript函数库
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之21.ABP展现层——Javascript函数库 ABP是“ASP.NET Boilerplate Project ...
- ABP(现代ASP.NET样板开发框架)系列之23、ABP展现层——异常处理
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之23.ABP展现层——异常处理 ABP是“ASP.NET Boilerplate Project (ASP.NET ...
- ABP入门系列(6)——展现层实现增删改查
这一章节将通过完善Controller.View.ViewModel,来实现展现层的增删改查.最终实现效果如下图: 一.定义Controller ABP对ASP.NET MVC Controllers ...
随机推荐
- Windows下如何更新 node.js
因为在Windows下是没有n模块的并不支持npm install -g n n latest更新,所以只能老老实实安装 1.在Path环境变量下查看自己的node.js安装路径 计算机-属性-高级 ...
- Redis系列--内存淘汰机制(含单机版内存优化建议)
https://blog.csdn.net/Jack__Frost/article/details/72478400?locationNum=13&fps=1 每台redis的服务器的内存都是 ...
- 检查死锁与Locked ownable synchronizers(转载)
通过jstack可快速检查线程的死锁信息,用法如下: # 获取JVM ID(JAVA 进程ID),通过参数lv可以获取更详细的JAVA方法调用信息 jps -lv # 得到JVM ID后,执行jsta ...
- 12C -- ORA-65005: missing or invalid file name pattern for file
克隆pdb创建新的pdb的时候遇到了以下的错误,具体过程如下文.数据库版本:12.2.0.1 查看已有pdb的tempfile文件 SQL> select name from v$tempfil ...
- logback配置详解
本文转自:https://segmentfault.com/a/1190000008315137 概览 简单地说,Logback 是一个 Java 领域的日志框架.它被认为是 Log4J 的继承人.L ...
- qeephp 记录下
百度百科: https://baike.baidu.com/item/qeephp/8328612?fr=aladdin 官方地址: http://www.qeephp.cn/app/index.ph ...
- [svc]inotify+rsync解决nfs单点问题
安装配置inotify 参考 yum install inotify* -y [root@n2 shell]# rpm -qa|grep inotify inotify-tools-3.14-8.el ...
- Netflix开源类库archaius(一)概述
archaius是什么,能做什么? archaius是Netflix公司开源项目之一,基于java的配置管理类库,主要用于多配置存储的动态获取.主要功能是对apache common configur ...
- ORGANISING THE TEST CASES
ORGANISING THE TEST CASES -Test note of “Essential Software Test Design” 2015-09-24 目录 22.1 Test Cas ...
- 跟Python打包相关的一些文章
6 things I learned about setuptools Python 101: easy_install or how to create eggs « The Mouse Vs. T ...