【问题标题】:Nebular menu click refreshing page component Issue星云菜单点击刷新页面组件问题
【发布时间】:2021-08-09 19:46:40
【问题描述】:

我在我的应用程序中使用星云菜单,当我点击菜单项时,它会自动滚动到页面顶部并再次关闭/展开,这意味着 page.component.ts 再次点击时试图重定向页面。

pages-menu.ts

export const userMenu: NbMenuItem[] = [
  {
    title: "Menu1",
    icon: "nb-person",
    children: [
      {
        title: "SubMenu1",
        link: "/pages/forms/Sub-Menu1"
      },
      {
        title: "SubMenu2",
        link: "/pages/forms/Sub-Menu2"
      }
    ]

如果我们在 pages.component.ts 中调用这个 menu.ts 变量

menu: any
constructor(){
this.menu = userMenu
}

这很好用。但是,如果我想让我的菜单像基于某些用户角色的显示/隐藏一样动态,而不是从 menu.ts 导出,而是直接在 pages.component.ts 文件中分配菜单列表,我面临一个问题,比如每个菜单项的 onclick 它刷新整个组件和拖动侧边栏菜单滚动到顶部并进行刷新。

pages.component.ts

menu: NbMenuItem[]
this.menu = [
      {
        title: "Menu1",
        icon: "nb-person",
        children: [
          {
            title: "SubMenu1",
            link: "/pages/forms/Sub-Menu1"
          },
          {
            title: "SubMenu2",
            link: "/pages/forms/Sub-Menu2"
          }
        ],
"hidden" : this.available_groups.some(v => ['Admin'].includes(v)) ? false : true

请有人指导我解决这个问题,在此先感谢。

【问题讨论】:

    标签: angular angular7 nebular


    【解决方案1】:

    只有在获得角色之后,您才会想要构建您的菜单。默认情况下,您将 this.menu 设置为 []。

    有一个函数从您的后端服务获取用户并创建一个函数来构建您的菜单。

    menu: NbMenuItem[] = [];
    
    ngOnInit() {
     this.getUser();
    }
    
    getUser() {
     call your api to get user with roles and then call buildMenuByRole(role)
    }
    
    buildMenuByRole(role: any) { <-- use an interface for role
       this.menu = [
        {
            title: 'Dashboard',
            icon: 'home-outline',
            link: '/pages/dashboard',
            hidden: (role && (role.findIndex(x => x.roleID === Roles.SystemAdministrator ||
                                                  x.roleID === Roles.ITUser) !== -1)) ? false : true,
            home: true,
          },
       ]
    }
    

    【讨论】:

    • 感谢您的回复。我在 API 的帮助下创建了动态的菜单结构。创建菜单 json 后,手动创建的 json 和 export const 看起来完全一样。但是,我没有在 this.menu = this.Arr 中分配手动创建的数组值,而不是放置外部 const 值,这会导致再次刷新菜单。你能帮我看看我在这里缺少什么吗?
    • 你能在像 stackblitz 这样的在线代码平台上重现这个吗?
    • Brian,我无法重现此 stackblitz 的确切问题,但处理代码的方式完全相同。我从静态 input.json 中的 api 获取 json 我正在创建菜单与 nebular 完全相同的结构并分配给菜单变量。
    • 我又发现了一件事,在从 api 获取数据后进行动态处理,我正在使用页面刷新,在应用刷新菜单之前工作得很好,在页面刷新之后我有点像滚动到顶部和菜单刷新这样的问题每次点击 this._router.routeReuseStrategy.shouldReuseRoute = () => false; this._router.onSameUrlNavigation = '重新加载'; this._router.navigate(['/same-route'])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2022-01-10
    • 1970-01-01
    • 2021-10-11
    • 2021-06-03
    相关资源
    最近更新 更多