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
  • 一個菜單項可以定義一個customDataorder

**INavigationProviderContext **具有一個獲得已存在菜單項、添加菜單以及菜單項的方法。這樣,不同的模塊就可以將自己的項添加到菜單上。

在一個應用中也可能有一個或更多的菜單,context.Manager.MainMenu引用了默認的主菜單。使用context.Manager.Menus可以創建和添加更多的菜單。

注冊導航提供者

創建導航提供者之后,我們應該在模塊的PreInitialize事件里將它注冊到ABP的配置中:

Configuration.Navigation.Providers.Add<SimpleTaskSystemNavigationProvider>();

展示菜單###

可以注入IUserNavigationManager,然后使用它來獲得菜單項,再將菜單項展示給用戶。這樣,我們就可以在服務端創建菜單了。

ABP在客戶端自動生成獲得菜單和菜單項的javascript APIabp.nav命名空間下的方法和對象就是用於這個目的。比如,可以使用 abp.nav.menus.Mainmenu獲得應用的主菜單。這樣我們就能在客戶端創建菜單了。

ABP模板使用了這個系統來創建菜單並將菜單展示給用戶,你可以通過創建一個模板來查看源代碼了解更多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM