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模板使用了这个系统来创建菜单并将菜单展示给用户,你可以通过创建一个模板来查看源代码了解更多。

posted @ 2015-12-30 21:39 tkbSimplest 阅读(...) 评论(...) 编辑 收藏