.net 热毛巾1.2,玩菜单

.net 热毛巾1.2,玩菜单,.net,angularjs,hottowel,.net,Angularjs,Hottowel,环境:vs 2013 express for web、hot 1.2、Breeze.WebApi2、sql server 2012 express 我希望能够在我的web应用程序的菜单中添加或删除项目,是否可能 我看到了config.route.js,其中的菜单是由getRoutes()生成并返回的: 函数getRoutes(){ 变量rts=[ { url:“/”, 配置:{ templateUrl:'app/dashboard/dashboard.html', 标题:“仪表板”, 设置:{

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

我希望能够在我的web应用程序的菜单中添加或删除项目,是否可能

我看到了config.route.js,其中的菜单是由getRoutes()生成并返回的:

函数getRoutes(){ 变量rts=[ { url:“/”, 配置:{ templateUrl:'app/dashboard/dashboard.html', 标题:“仪表板”, 设置:{ 导航:2, 内容:“仪表板” } } }, { url:“/admin”, 配置:{ 标题:“管理员”, templateUrl:'app/admin/admin.html', 设置:{ 导航:6, 内容:“贵贵贵主页” } } }, { url:“/register”, 配置:{ 标题:'登记', templateUrl:'app/register/register.html', 设置:{ 导航:4, 内容:“注册” }, 可见:假 } }, { url:“/login”, 配置:{ 标题:“登录”, templateUrl:'app/login/login.html', 设置:{ 导航:5, 内容:“登录” } } }, { url:“/”, 配置:{ 标题:“客户”, templateUrl:'app/client/client.html', 设置:{ 导航:1, 内容:“客户” } } }, { url:“/mission”, 配置:{ 标题:"使命",, templateUrl:'app/mission/mission.html', 设置:{ 导航:7, 内容:“使命” } } } , { url:“/uploadFile”, 配置:{ 标题:“上传文件”, templateUrl:'app/uploadFile/uploadFile.html', 设置:{ 导航:8, 内容:“上传文件” } } } ]; 返回rts; } (应用程序以客户端开始

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

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

我认为config.route.js一开始就加载了一次

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


在何处注入authenticationService以更新菜单?

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

与其从菜单中添加或删除项目(路由,我认为这是不可能的),更简单的是利用它们的可见性,您可以向菜单的项目添加属性(可见,索引,…,任何您想要的),例如,您可以这样做(在config.route.js中):

在菜单的viewmodel(在我的示例中为:sidebar.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;
我已经完成了一项服务:authenticationService,它允许您知道当前用户是否经过身份验证,知道这一点您可以呈现菜单项或不呈现菜单项

我认为这很简单

问候

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;
    });
}

如果从设置中删除导航(也可以删除内容),则问题已得到解决。

如果有两组菜单,您将如何解决此问题。一个在侧边栏,一个在顶部导航栏。侧栏菜单取决于topnavbar选择的菜单。比如说,顶部菜单显示客户、供应商、订单等,侧栏(取决于导航栏所选菜单)应显示创建客户,在顶部导航栏上选择客户后列出客户
        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;
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;
    });
}
{
        url: '/login',
        config: {
            title: 'login',
            templateUrl: 'app/login/login.html',
            settings: {
            }
        }
    }