• Abp添加菜单


    Abp添加菜单

    在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")
    ];
  • 相关阅读:
    Maybe You Don't Know ! 如何比较两个引用是否指向同一个对象?
    记录一点项目心得...
    SharePoint 站点模版
    ObjectSpaces,See you in 2006...
    CLR如何实现线程同步
    Using 1.1, Waiting 2.0 & EasyThread
    在SharePoint中的Workflow引擎开发完成
    ViewState
    《WalkThrough WebPart 入门指南二》完成
    隐藏在.NET中的IoC?
  • 原文地址:https://www.cnblogs.com/GiserPage/p/10430033.html
Copyright © 2020-2023  润新知