Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS菜单在MEAN.js中是公共的_Javascript_Angularjs_Mean Stack - Fatal编程技术网

Javascript AngularJS菜单在MEAN.js中是公共的

Javascript AngularJS菜单在MEAN.js中是公共的,javascript,angularjs,mean-stack,Javascript,Angularjs,Mean Stack,我正在使用创建一个webapp,但导航菜单出现了问题 有几个问题似乎与我的问题有关,但没有一个答案能为我解决,而且似乎大多数问题都归因于文档错误 我正在尝试将menuItem设置为public,我在我的core.client.config.js中就是这样做的: Menus.addMenuItem('topbar', 'About Us', 'about', 'item', '/about', true, null, 1); 所有指定的工作,甚至订购。但是,publictrue参数没有任何作用

我正在使用创建一个webapp,但导航菜单出现了问题

有几个问题似乎与我的问题有关,但没有一个答案能为我解决,而且似乎大多数问题都归因于文档错误

我正在尝试将menuItem设置为public,我在我的core.client.config.js中就是这样做的:

Menus.addMenuItem('topbar', 'About Us', 'about', 'item', '/about', true, null, 1);
所有指定的工作,甚至订购。但是,public
true
参数没有任何作用

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

this.addMenu('topbar', true);

任何帮助都将不胜感激

问题在于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');
Menus.addSubMenuItem('topbar', 'articles', 'List Articles', 'articles', true);
^^对vv的更改

Menus.addSubMenuItem('topbar', 'articles', 'List Articles', 'articles', '/articles', true);
当然,您可以更改函数签名来避免这种情况。只需在menus.client.service.js

 // Add submenu item object
this.addSubMenuItem = function(menuId, rootMenuItemURL, menuItemTitle, menuItemURL, isPublic, menuItemUIRoute, roles, position) {
    // Validate that the menu exists
然后您可以像这样添加子菜单:

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');
Menus.addSubMenuItem('topbar', 'articles', 'List Articles', 'articles', true);

我认为这可能与我用AngularStrap替换AngularUI有关,但这个问题仍然存在于一个独立的项目中,该项目具有未修改的依赖项。检查
addMenuItem()
的源代码以及其他任何子菜单函数,以查看参数定义。一旦我把它们分类,我就可以在菜单项中使用
角色
。您可能需要检查这个答案@用户3681587已经这样做了,没有解决我的问题。我确实使用了将topbar设置为all public的方法,但从长远来看,这不是我想要的。@MishaPrasolov user3681587提供的链接中的答案也适用于您设置的地方。addMenu('topbar',true,['user']);在menus.client.services.js中,然后为menus.addMenuItem语句中的特定页面覆盖它