javascript - 如何根据用户在angularjs中的角色显示不同的菜单项?

标签 javascript angularjs drop-down-menu menu menuitem

我正在使用 meanjs堆栈来编写一个网络应用程序。我需要向所有用户(登录或未登录)显示下拉菜单,然后在用户登录时向下拉菜单添加更多元素。

例如,假设您有一个产品列表。您创建了一个名为“Products”的下拉菜单,其中包含元素“List products”。无论用户是否登录,都会出现此“列出产品”元素。如果用户已登录,则在名为“编辑库存”的下拉列表中显示另一个元素。

meanjs 网站说堆栈使用了 "AngularJS Menus Service"并列出了一些文档,但我找不到有关此服务使用情况的更多信息。链接文档提到了可选参数 isPublicroles,但是当我尝试使用它们时,没有任何效果。

代码 Menus.addMenuItem('topbar', 'Bios', 'bios', 'dropdown', '/bios(/create)?'); 仅在用户已登录。

它与 Menus.addMenuItem('topbar', 'Bios', 'bios', 'dropdown', '/bios(/create)?', true); 具有相同的效果;。可选的 isPublic 参数似乎没有什么区别。我做错了什么?

我找到了 this question ,相似但不完全相同,也没有得到令人满意的回答。

要使用 Angular 的菜单服务,用户是否需要登录?

最佳答案

刚刚看了meanjs MenuService源码,这是addMenuItem:

 this.addMenuItem = function (menuId, menuItemTitle, menuItemURL, menuItemType, menuItemUIRoute, isPublic, roles) {
  // Validate that the menu exists
  this.validateMenuExistance(menuId);
  // Push new menu item
  this.menus[menuId].items.push({
    title: menuItemTitle,
    link: menuItemURL,
    menuItemType: menuItemType || 'item',
    menuItemClass: menuItemType,
    uiRoute: menuItemUIRoute || '/' + menuItemURL,
    isPublic: isPublic || this.menus[menuId].isPublic,
    roles: roles || this.defaultRoles,
    items: [],
    shouldRender: shouldRender
  });
  // Return the menu object
  return this.menus[menuId];
};

从这段代码中,如果你想重置 isPublic,你应该用 menuItemUIRouteisPublic 调用 func。

因为如果您没有传递 menuItemUIRoute。参数会混淆。

P.S 这是 Source Code在第 237 行,文档不正确或者这是一个错误。希望这对你有用。 :)

关于javascript - 如何根据用户在angularjs中的角色显示不同的菜单项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24501074/

相关文章:

javascript - 控制 View 的元素数组 (AngularJS)

angularjs - 如何排除 `node_modules/@types/**/node_modules` ?

asp.net - 清除单选按钮选定索引上的下拉菜单已更改

javascript - 根据浏览器更改下载链接

javascript - 如何在 javascript 中使 div 向左移动然后向右移动? (没有 jQuery)

javascript - react : How to test component's input which uses ref?

javascript - Controller 中的 Angular 函数构造函数

php - 使用 PHP 填充下拉列表,不重复

jquery - 在导航和下拉菜单之间创建一个间隙

javascript - 跨浏览器事件对象规范化?