【问题标题】:hot towel angular 1.2, playing with the menuhot towel angular 1.2,玩弄菜单
【发布时间】:2015-05-08 19:50:47
【问题描述】:
               Hi all,

环境:vs 2013 express for web、hot towel angular 1.2、Breeze.WebApi2、sql server 2012 express。

我希望能够在我的网络应用程序的菜单中添加或删除项目,这可能吗?

我已经看到了 config.route.js,其中菜单由 getRoutes() 构建和返回:

function getRoutes() {

    var rts = [
        {
            url: '/',
            config: {
                templateUrl: 'app/dashboard/dashboard.html',
                title: 'dashboard',
                settings: {
                    nav: 2,
                    content: '<i class="fa fa-dashboard"></i> Dashboard'
                }
            }
        },
        {
            url: '/admin',
            config: {
                title: 'admin',
                templateUrl: 'app/admin/admin.html',
                settings: {
                    nav: 6,
                    content: "<i class='fa fa-dashboard'></i> GUIGUI's Homepage"
                }
            }
        }, {
            url: '/register',
            config: {
                title: 'register',
                templateUrl: 'app/register/register.html',
                settings: {
                    nav: 4,
                    content: '<i class="fa fa-lock"></i> Register'
                },
                visible: false
            }
        }, {
            url: '/login',
            config: {
                title: 'login',
                templateUrl: 'app/login/login.html',
                settings: {
                    nav: 5,
                    content: '<i class="fa fa-lock"></i> Login'
                }
            }
        }, {
            url: '/',
            config: {
                title: 'Client',
                templateUrl: 'app/client/client.html',
                settings: {
                    nav: 1,
                    content: '<i class="fa fa-dashboard"></i> client'
                }
            }
        }, {
            url: '/mission',
            config: {
                title: 'Mission',
                templateUrl: 'app/mission/mission.html',
                settings: {
                    nav: 7,
                    content: '<i class="fa fa-lock"></i> mission'
                }
            }
        }
        , {
            url: '/uploadFile',
            config: {
                title: 'uploadFile',
                templateUrl: 'app/uploadFile/uploadFile.html',
                settings: {
                    nav: 8,
                    content: '<i class="fa fa-lock"></i> uploadFile'
                }
            }
        }
    ];

    return rts;
}

(应用以 Client 开头)。

我创建了一个身份验证服务来了解当前用户(如果有登录用户)。

我的问题是:在哪里更新菜单更明智?

我认为 config.route.js 在开始时会加载一次。

我的目的是根据用户是否登录在菜单中添加或删除项目,可能吗?

在哪里注入 authenticationService 来更新菜单?

【问题讨论】:

    标签: .net angularjs hottowel


    【解决方案1】:

    我找到了一个解决方案,相当简单。

    与其在菜单中添加或删除项目(路线,我认为这是不可能的),更简单的是发挥它们的可见性,您可以将属性添加到菜单项(可见、索引、...、任何你想要的),例如你可以这样做(它在 config.route.js 中):

            var persistantRoutes = [
                {
                    url: '/await',
                    config: {
                        title: '',
                        templateUrl: 'app/await/await.html',
                        settings: {
                            nav: 1,
                            content: "",
                            index: 0,
                            visible: false
                        }
                    }
                }, {
                    url: '/reinit',
                    config: {
                        title: '',
                        templateUrl: 'app/reinit/reinit.html',
                        settings: {
                            nav: 2,
                            content: "",
                            index: 0,
                            visible: false
                        }
                    }
                }, {
        ...
    
    routes = persistantRoutes;
    

    在菜单的视图模型中(在我的例子中:sidebar.js),你可以这样做:

    function activate() {
        authenticationService.checkAuthentication().then(getNavRoutes);
    }
    
    function getNavRoutes() {
        vm.navRoutes = routes.filter(function (r) {
    
            if (authenticationService.currentUser.isAuthenticated) {
                switch (r.config.title) {
                    case "login":
                    case "register":
                        r.config.settings.visible = false;
                        break;
                    case "userHomePage":
                        r.url = "/";
                        r.config.settings.visible = true;
                        r.config.settings.nav = 3;
                        break;
                    case "FGHomePage":
                        r.url = "/FGHomePage";
                        r.config.settings.nav = 4;
                        break;
                }
            }
            else {
                switch (r.config.title) {
                    case "login":
                    case "register":
                        r.config.settings.visible = true;
                        break;
                    case "userHomePage":
                        r.url = "/userHomePage";
                        r.config.settings.visible = false;
                        r.config.settings.nav = 4;
                        break;
                    case "FGHomePage":
                        r.url = "/";
                        r.config.settings.nav = 3;
                        break;
                }
            }
    
            if (r.config.settings.visible == true) {
                return r.config.settings && r.config.settings.nav;
            }
        }).sort(function (r1, r2) {
            return r1.config.settings.nav - r2.config.settings.nav;
        });
    }
    

    我已经完成了一项服务:authenticationService,它可以让您知道当前用户是否经过身份验证,知道这一点您可以呈现或不呈现菜单项。

    这我觉得很简单。

    问候。

    【讨论】:

    • 如果有两组菜单,你将如何解决这个问题。一个在侧边栏中,一个在顶部导航栏中。侧边栏菜单取决于 topnavbar 选择的菜单。假设顶部菜单显示客户、供应商、订单等,而侧栏取决于导航栏选择的菜单应显示创建客户,在顶部导航栏上选择客户时列出客户
    【解决方案2】:
    {
            url: '/login',
            config: {
                title: 'login',
                templateUrl: 'app/login/login.html',
                settings: {
                }
            }
        }
    

    如果你从设置中删除导航(你也可以删除内容),你的问题就解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 1970-01-01
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多