在abp模板中添加菜单,EntityFramework+Angular.js模板,使用的Abp版本为3.8.1。

创建Abp项目模板,例如名称叫做LawAndRegulation。

服务端添加菜单项

找到Mpa或者Spa项目,也就是LawAndRegulation.WebMpa或者LawAndRegulation.WebSpaAngular。

项目中找到LawAndRegulationNavigationProvider类,在类中找到SetNavigation方法,按照模板中提供的菜单添加方法添加MenuItemDefinition。

MenuItemDefinition即为我们需要添加的菜单项,菜单项包含几个重要的属性:

  • 【name】,菜单项名称,在View层添加菜单项时对应的名称;
  • 【displayName】,显示名称,本地化显示在名称,也就是多语言需要解释的名称;
  • 【url】,导航的路由名称;
  • 【icon】,图标名称;
  • 【requireAuthentication】,登陆认证及权限认证;

设置好这几项后在服务端导航的内容已经设置完成。

示例代码:

public class LawAndRegulationNavigationProvider : NavigationProvider
    {
        public override void SetNavigation(INavigationProviderContext context)
        {
            context.Manager.MainMenu
                .AddItem(
                new MenuItemDefinition(
                    "DictionaryManager",
                    L("DictionaryManager"),
                    url: "#DictionaryManager",
                    icon: "fa fa-info",
                    requiresAuthentication: true
                    )
                    );
        }

        private static ILocalizableString L(string name)
        {
            return new LocalizableString(name, LawAndRegulationConsts.LocalizationSourceName);
        }
    }

客户端添加菜单

在LawAndRegulation.WebSpaAngular项目中找到App/Main/views/layout/sidebar-nav.js文件,在文件中编辑属性menuItems,属性menuItems为数组,在数组中添加对象通过createMenuItem方法,方法中参数:

  • 1.本地化标题;
  • 2.权限名称;
  • 3.图标名称;
  • 4.路由名称,也可以是Url链接;
  • 5.子项集合,可选参数;

实例代码:

vm.menuItems = [
                createMenuItem(App.localize("HomePage"), "", "home", "home"),
                createMenuItem(App.localize("Tenants"), "Pages.Tenants", "business", "tenants"),
                createMenuItem(App.localize("Users"), "Pages.Users", "people", "users"),
                createMenuItem(App.localize("Roles"), "Pages.Roles", "local_offer", "roles"),
                createMenuItem(App.localize("LawAndRegulation"), "", "info", "LawAndRegulation"),
                createMenuItem(App.localize("About"), "", "info", "about")
];

 其中LawAndRegulation为我们添加的菜单项。

客户端添加路由

在WebSpaAngular项目中找到app.js文件,app.js文件在App/Mian/路径下。

找到app.config,在function方法中找到回调函数中$stateProvider参数,调用参数的state方法。

state方法有两个参数:

  • 【navigationName】字符串,导航名称;
  • 【route】对象,对象包含三个属性,服务端Url、客户端页面Url以及菜单名称(本地化的名称);

设置完以上,客户端路由已经设置完成。

实例代码如下:

            $stateProvider
                .state('DictionaryManager', {
                    url: '/DictionaryManger',
                    templateUrl: '',
                    menu:'DictionaryManager'
                });

 添加多级菜单

服务器端

服务器端添加多级菜单非常方便,只需要调用MenuItemDefinition的方法AddItem,在第一节内容基础上扩展,代码如下:

public class LawAndRegulationNavigationProvider : NavigationProvider
    {
        public override void SetNavigation(INavigationProviderContext context)
        {
            context.Manager.MainMenu
                .AddItem(
                new MenuItemDefinition(
                    "DictionaryManager",
                    L("DictionaryManager"),
                    url: "#DictionaryManager",
                    icon: "fa fa-info",
                    requiresAuthentication: true
                    ).AddItem(
                    new MenuItemDefinition(
                        "Law",
                        L("Law"),
                        url: "#Law",
                        icon: "fa fa-info",
                        requiresAuthentication: true))
                        )
                    );
        }

        private static ILocalizableString L(string name)
        {
            return new LocalizableString(name, LawAndRegulationConsts.LocalizationSourceName);
        }
    }

客户端添加路由

在第二节基础上扩展app.js文件中关于路由的内容,代码如下:

$stateProvider
                .state('DictionaryManager', {
                    url: '/DictionaryManger',
                    templateUrl: '',
                    menu:'DictionaryManager'
                })
                .state('Law', {
                    url: '/Law',
                    templateUrl: '/App/Main/views/LawAndRegulation/index.cshtml',
                    menu: 'Law'
                });

 客户端添加多级菜单

在第三节的基础上添加客户端多级菜单,多级客户端菜单其实就是在最后一个参数内添加一个菜单项数组:

vm.menuItems = [
                createMenuItem(App.localize("HomePage"), "", "home", "home"),
                createMenuItem(App.localize("Tenants"), "Pages.Tenants", "business", "tenants"),
                createMenuItem(App.localize("Users"), "Pages.Users", "people", "users"),
                createMenuItem(App.localize("Roles"), "Pages.Roles", "local_offer", "roles"),
                createMenuItem(App.localize("LawAndRegulation"), "", "info", "LawAndRegulation",
[createMenuItem(App.localize("Law"), "", "info", "Law")]),
                createMenuItem(App.localize("About"), "", "info", "about")
];

 

分类:

技术点:

相关文章: