我正在使用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);
任何帮助将不胜感激!
答案 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);