AngularJS菜单是MEAN.js中的公共

时间:2015-01-11 20:41:04

标签: javascript angularjs mean-stack

我正在使用MEAN.js创建一个webapp,我遇到导航菜单的问题。

有一些问题似乎与我的问题有关,但没有一个问题可以解决这个问题,而且似乎大多数问题都归因于文档错误。

我正在尝试将menuItem设置为public,这就是我在core.client.config.js中执行此操作的方法:

Menus.addMenuItem('topbar', 'About Us', 'about', 'item', '/about', true, null, 1);

指定的一切都有效,甚至是订购。但是,公共true参数不会执行任何操作。

目前我只是在menus.client.service.js中将整个topbar设置为isPublic,但这并不理想,因为我想控制谁可以看到什么!

this.addMenu('topbar', true);

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

问题在于 public / modules / core / services / menus.client.service.js 为菜单,每个项目和子项调用的shouldRender函数不检查isPublic。 所以只需添加:

// A private function for rendering decision 
var shouldRender = function(user) {
    if(this.isPublic){
        return true;
    }
    ...
}

并将最后一行更改为:

//Adding the topbar menu
this.addMenu('topbar', true);

因为否则菜单本身永远不会呈现。

现在您可以像这样调用addMenuItem和addSubMenuItem:

Menus.addMenuItem('topbar', 'Articles', 'articles', 'dropdown', '/articles(/create)?', <true/false>);
Menus.addSubMenuItem('topbar', 'articles', 'List Articles', 'articles');
Menus.addSubMenuItem('topbar', 'articles', 'New Article', 'articles/create');

请注意,如果您不提供true或false,则菜单项将从其父级继承。当我们将菜单设置为公开时,每个孩子都是公开的。一旦我们将菜单项设置为私有,孩子们也是私人的。

如果要更改SubMenu可见性,请注意参数的数量。第六个论点必须是真的。

Menus.addSubMenuItem('topbar', 'articles', 'List Articles', 'articles');

^^更改为vv

Menus.addSubMenuItem('topbar', 'articles', 'List Articles', 'articles', '/articles', true);

您当然可以更改功能签名以避免这种情况。只需在 menus.client.service.js

中交换menuItemUIRoute和isPublic
 // Add submenu item object
this.addSubMenuItem = function(menuId, rootMenuItemURL, menuItemTitle, menuItemURL, isPublic, menuItemUIRoute, roles, position) {
    // Validate that the menu exists

然后你可以像这样添加SubMenu:

Menus.addSubMenuItem('topbar', 'articles', 'List Articles', 'articles', true);