PrimeNG p-menubar 将一项向右对齐

Posted

技术标签:

【中文标题】PrimeNG p-menubar 将一项向右对齐【英文标题】:PrimeNG p-menubar align one item to right 【发布时间】:2020-04-03 11:43:09 【问题描述】:

我正在使用 PrimeNG 8.1.1,我想将其中一项推送到右侧(注销和配置文件的子菜单)。

有什么建议吗?

    this._menuItems = [
          
            label: 'Dashboard',
            routerLink: '/dashboard'
          ,
          
            icon:'pi pi-fw pi-user',
            items: [
              
                label: 'Profile',
                icon: 'pi pi-fw pi-user',
                command:()=> this.profile(),
              ,
              
                label: 'Logout',
                icon: 'pi pi-fw pi-sign-out',
                command:()=> this.logout(),
              
            ]
          
        ]

【问题讨论】:

【参考方案1】:

完全披露:我是新手,所以这可能不是最好的解决方案。 在primeng 11.4.2上测试

菜单栏是一个 flex 容器,因此我们应该能够使用标准的 flex 理念来推动项目 - 请参阅 Aligning flex items on MDN。与这里的其他答案一样,我们利用菜单项的style 属性来控制它的显示方式,在这种情况下,我们需要使用margin-left: auto 将项目推到右侧。

我遇到的问题是 p-menubarsub 组件没有占据 100% 的可用宽度,所以单独使用 margin-left 没有任何效果,因为没有空间可以移动项目。

一旦解决这个问题,它似乎对我有用。

组件.css

:host ::ng-deep p-menubarsub 
    width: 100%;

component.html

<p-menubar [model]="mainMenu">
    <ng-template pTemplate="start">
        <h4>Welcome</h4>
    </ng-template>
</p-menubar>

组件.ts

export class .... 
  mainMenu: MenuItem[] = [
    label: 'Left menu item',
    label: 'Right menu item', style: 'margin-left': 'auto'
  ];

【讨论】:

【参考方案2】:

如果我们从 prime 检查编译的代码,我们可以看到“icon”实际上只是表示类。这意味着我们可以在不影响图标的情况下为图标添加自定义类。

this._menuItems = [
      
        label: 'Dashboard',
        routerLink: '/dashboard'
      ,
      
        icon:'pi pi-fw pi-user',
        items: [
          
            label: 'Profile',
            icon: 'my-margin-left pi pi-fw pi-user',
            command:()=> this.profile(),
          ,
          
            label: 'Logout',
            icon: 'my-margin-left pi pi-fw pi-sign-out',
            command:()=> this.logout(),
          
        ]
      
  ]

现在我们可以在 Styles.css 中简单地添加

.layout-wrapper .layout-menu li a > .my-margin-left 
    margin-left: 25px;

这将为该类的菜单中的所有项目添加 css。此解决方案适用于菜单项和子菜单项。

【讨论】:

我尝试了您的确切示例,但它不起作用。我不确定我错过了什么。 :( 嗨,Travis,您使用的是同一个版本的 Prime 吗?我上面发布的解决方案可能不再对素数 9 或 10 有效。【参考方案3】:

对于 PrimeNG 11.2.0 版本,您有两种选择。

(1) 使用 styleClass 属性:

this._menuItems = [
      
        label: 'Dashboard',
        routerLink: '/dashboard'
      ,
      
        icon:'pi pi-fw pi-user',
        items: [
          
            label: 'Profile',
            icon: 'my-margin-left pi pi-fw pi-user',
            command:()=> this.profile(),
          ,
          
            label: 'Logout',
            styleClass: 'p-ml-6',
            icon: 'my-margin-left pi pi-fw pi-sign-out',
            command:()=> this.logout(),
          
        ]
      
  ]

(2) 或在 HTML 上使用 ng-template pTemplate="end"

<p-menubar [model]="items">
    <ng-template pTemplate="end">
        <button type="button" pButton label="Logout" icon="pi pi-sign-out"></button>
    </ng-template>
</p-menubar>

【讨论】:

以上是关于PrimeNG p-menubar 将一项向右对齐的主要内容,如果未能解决你的问题,请参考以下文章

primeng p-menubar 示例不起作用

将 dropMenu 中的所有子菜单项向右对齐并隐藏下拉箭头

Primefaces p:tabMenu 将 p:menuitem 向右对齐

Flex 如何让最后一项右边对齐?(CSS)

将一项对齐到 ActionBar 的左侧

p-menuitem 不是已知元素 - primeng