ABP理论学习之导航(Navigation)
本篇目录
每一个web应用在页面之间都有一些要导航的菜单。ABP提供了公用的基础设施来创建菜单并将菜单展示给用户。
创建菜单###
一个应用可能由不同的模块组成,每个模块可能有它自己的菜单项。想要定义菜单项,我们需要创建一个派生自NavigationProvider的类。
假设我们有一个如下所示的主菜单:
- Tasks
- Reports
- Administration
- User Management
- Role Management
这里,Administration菜单项有两个子菜单项。创建这么一个菜单的导航提供者类如下所示:
public class SimpleTaskSystemNavigationProvider : NavigationProvider
{
public override void SetNavigation(INavigationProviderContext context)
{
context.Manager.MainMenu
.AddItem(
new MenuItemDefinition(
"Tasks",
new LocalizableString("Tasks", "SimpleTaskSystem"),
url: "/Tasks",
icon: "fa fa-tasks"
)
).AddItem(
new MenuItemDefinition(
"Reports",
new LocalizableString("Reports", "SimpleTaskSystem"),
url: "/Reports",
icon: "fa fa-bar-chart"
)
).AddItem(
new MenuItemDefinition(
"Administration",
new LocalizableString("Administration", "SimpleTaskSystem"),
icon: "fa fa-cogs"
).AddItem(
new MenuItemDefinition(
"UserManagement",
new LocalizableString("UserManagement", "SimpleTaskSystem"),
url: "/Administration/Users",
icon: "fa fa-users",
requiredPermissionName: "SimpleTaskSystem.Permissions.UserManagement"
)
).AddItem(
new MenuItemDefinition(
"RoleManagement",
new LocalizableString("RoleManagement", "SimpleTaskSystem"),
url: "/Administration/Roles",
icon: "fa fa-star",
requiredPermissionName: "SimpleTaskSystem.Permissions.RoleManagement"
)
)
);
}
}
一个MenuItemDefinition一般有一个唯一的name,一个本地化的displayName,一个 url和一个 icon。而且,
- 一个菜单项可能要求一个特定的用户具有展示该菜单的权限。此时可以使用requiredPermissionName属性。
- 一个菜单项可能依赖于一个功能。此时可以使用featureDependency。
- 一个菜单项可以定义一个customData和 order。
**INavigationProviderContext **具有一个获得已存在菜单项、添加菜单以及菜单项的方法。这样,不同的模块就可以将自己的项添加到菜单上。
在一个应用中也可能有一个或更多的菜单,context.Manager.MainMenu引用了默认的主菜单。使用context.Manager.Menus可以创建和添加更多的菜单。
注册导航提供者
创建导航提供者之后,我们应该在模块的PreInitialize事件里将它注册到ABP的配置中:
Configuration.Navigation.Providers.Add<SimpleTaskSystemNavigationProvider>();
展示菜单###
可以注入IUserNavigationManager,然后使用它来获得菜单项,再将菜单项展示给用户。这样,我们就可以在服务端创建菜单了。
ABP在客户端自动生成获得菜单和菜单项的javascript API。 abp.nav命名空间下的方法和对象就是用于这个目的。比如,可以使用 abp.nav.menus.Mainmenu获得应用的主菜单。这样我们就能在客户端创建菜单了。
ABP模板使用了这个系统来创建菜单并将菜单展示给用户,你可以通过创建一个模板来查看源代码了解更多。
如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏我一杯咖啡【物质支持】,也可以点击右下角的【好文要顶】按钮【精神支持】,因为这两种支持都是我继续写作,分享的最大动力!
作者:tkb至简
声明:原创博客请在转载时保留原文链接或者在文章开头加上本人博客地址,如发现错误,欢迎批评指正。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!
已将所有赞助者统一放到单独页面!签名处只保留最近10条赞助记录!查看赞助者列表
衷心感谢打赏者的厚爱与支持!也感谢点赞和评论的园友的支持! | |||
---|---|---|---|
打赏者 | 打赏金额 | 打赏日期 | |
微信:匿名 | 10.00 | 2017-08-03 | |
微信:匿名 | 10.00 | 2017-08-04 | |
微信:匿名 | 5.00 | 2017-06-15 | |
支付宝:一个名字499***@qq.com | 5.00 | 2017-06-14 | |
微信:匿名 | 16.00 | 2017-04-08 | |
支付宝:向京刘 | 10.00 | 2017-04-13 | |
微信:匿名 | 10.00 | 2017-003-08 | |
微信:匿名 | 5.00 | 2017-03-08 | |
支付宝:lll20001155 | 5.00 | 2017-03-03 | |
支付宝:她是一个弱女子 | 5.00 | 2017-03-02 |