本篇目錄
每一個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模板使用了這個系統來創建菜單並將菜單展示給用戶,你可以通過創建一個模板來查看源代碼了解更多。