ABP理論學習之導航(Navigation)
本篇目錄
每一個web應(yīng)用在頁面之間都有一些要導航的菜單。ABP提供了公用的基礎(chǔ)設(shè)施來創(chuàng)建菜單并將菜單展示給用戶。
創(chuàng)建菜單###
一個應(yīng)用可能由不同的模塊組成,每個模塊可能有它自己的菜單項。想要定義菜單項,我們需要創(chuàng)建一個派生自NavigationProvider的類。
假設(shè)我們有一個如下所示的主菜單:
- Tasks
- Reports
- Administration
- User Management
- Role Management
這里,Administration菜單項有兩個子菜單項。創(chuàng)建這么一個菜單的導航提供者類如下所示:
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。而且,
- 一個菜單項可能要求一個特定的用戶具有展示該菜單的權(quán)限。此時可以使用requiredPermissionName屬性。
- 一個菜單項可能依賴于一個功能。此時可以使用featureDependency。
- 一個菜單項可以定義一個customData和 order。
**INavigationProviderContext **具有一個獲得已存在菜單項、添加菜單以及菜單項的方法。這樣,不同的模塊就可以將自己的項添加到菜單上。
在一個應(yīng)用中也可能有一個或更多的菜單,context.Manager.MainMenu引用了默認的主菜單。使用context.Manager.Menus可以創(chuàng)建和添加更多的菜單。
注冊導航提供者
創(chuàng)建導航提供者之后,我們應(yīng)該在模塊的PreInitialize事件里將它注冊到ABP的配置中:
Configuration.Navigation.Providers.Add<SimpleTaskSystemNavigationProvider>();
展示菜單###
可以注入IUserNavigationManager,然后使用它來獲得菜單項,再將菜單項展示給用戶。這樣,我們就可以在服務(wù)端創(chuàng)建菜單了。
ABP在客戶端自動生成獲得菜單和菜單項的javascript API。 abp.nav命名空間下的方法和對象就是用于這個目的。比如,可以使用 abp.nav.menus.Mainmenu獲得應(yīng)用的主菜單。這樣我們就能在客戶端創(chuàng)建菜單了。
ABP模板使用了這個系統(tǒng)來創(chuàng)建菜單并將菜單展示給用戶,你可以通過創(chuàng)建一個模板來查看源代碼了解更多。
已將所有贊助者統(tǒng)一放到單獨頁面!簽名處只保留最近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 | |

浙公網(wǎng)安備 33010602011771號