当前位置: 首页 > 知识库问答 >
问题:

角度7+:ngbDropdown菜单折叠而不是弹出

牟正真
2023-03-14

我正在使用ngb下拉列表在屏幕上显示用户列表。当用户单击下拉列表时,它将显示“用户详细信息”表单。

问题是,这个表单弹出在其他用户和内容之上。我需要用户详细信息折叠而不是弹出。

我试着把aria-haspopup=false,但这并没有起到任何作用,事实上,它在inspector中仍然显示为true,所以我对它的作用和现在如何实现这一点有点困惑?我正在考虑使用像navbar切换器中的数据切换和折叠之类的东西,但不确定如何在ngbDropdown菜单中正确实现这一点....

所需结果的图像链接1

<div ngbDropdown *ngFor="let user of users" class="user-list">
    <a ngbDropdownToggle id="dropdownForm" role="button" aria-haspopup="false" aria-expanded="false">{{user.firstName}} {{user.lastName }} </a>
    <div ngbDropdownMenu aria-labelledby="dropdownForm">
      <userForm></userForm>
    </div>
</div>

共有1个答案

浦墨竹
2023-03-14

从你分享的描述/图片来看,你需要的是手风琴,而不是弹出式的...因为手风琴具有可折叠的效果,而下拉菜单总是弹出式的

相关HTML:

<ngb-accordion #acc2="ngbAccordion" activeIds="ngb-panel-0" [closeOthers]="true">
  <ngb-panel  *ngFor="let user of users; let idx = index" class="user-list" >
    <ng-template ngbPanelTitle >
      <span  (click)='toggleAccordion(idx)'>{{user.firstName}} {{user.lastName }}</span>
      <span class='stickToRight' (click)='toggleAccordion(idx)' style='float:right'> 
        <!-- ... {{idx}} - {{user.opened }} -->
        <ng-container *ngIf="user.opened">
        <i class='fa fa-angle-down'></i>
        </ng-container>
        <ng-container *ngIf="!user.opened">
        <i class='fa fa-angle-right'></i>
        </ng-container>
      </span>
    </ng-template>
    <ng-template ngbPanelContent>
      <!-- <userForm></userForm> -->
      <input type='text' placeholder="first Name" value="{{user.firstName}}" />  <br/>
      <input type='text' placeholder="last Name" value="{{user.lastName}}" /> <br/>
      <input type='text' placeholder="Age" /> <br/>
    </ng-template>
  </ngb-panel>
</ngb-accordion>

相关TS:

import { Component } from '@angular/core';

@Component({
  selector: 'ngbd-accordion-basic',
  templateUrl: './accordion-basic.html',
  styles: [`
  .stickToRight{position: absolute; right: 30px;}
  `]
})
export class NgbdAccordionBasic {
  users = [
    { firstName: 'fName 1', lastName: 'lName 1', opened: false },
    { firstName: 'fName 2', lastName: 'lName 2', opened: false },
    { firstName: 'fName 3', lastName: 'lName 3', opened: false },
    { firstName: 'fName 4', lastName: 'lName 4', opened: false },
    { firstName: 'fName 5', lastName: 'lName 5', opened: false }
  ];

  resetOthers(index) {
    for (var i = 0; i < this.users.length; i++) {
      if (i !== index) {
        this.users[i].opened = false;
      }
    }
  }

  toggleAccordion(index) {
    if (this.users[index].opened == false) {
      this.users[index].opened = true;
      this.resetOthers(index);
    } else {
      this.users[index].opened = false;
      this.resetOthers(index);
    }
  }
}

更新:根据以下提问者的评论

在这里工作stackblitz

 类似资料:
  • 我跟随这篇文章https://medium.com/@alok.lko631/submenu-or-dropdown-menu-without-jquery-in-angular-2-4-5-6-using-only-bootstrap-and-custom-FD716DB511BE来折叠菜单和子菜单。我能够实现逻辑,但我面临的问题是,我有多个菜单和点击另一个菜单(已经打开的菜单没有被折叠),而且

  • 我有一棵树,上面有一个JButton作为节点。 我希望能够在两组值之间切换按钮名称及其调用的方法。 我认为这将工作正常,如果树将刷新后,每次按钮点击。 这种方法似乎有效,但它会在刷新时将树折叠,我需要树保持打开状态。 我没有添加/删除节点,所以我在网上看到的许多其他方法都不适用。

  • 问题内容: 我在Bootstrap 3中有或多或少的标准导航 它通常会在较小的设备上崩溃。单击菜单按钮可展开菜单,但是如果我单击(或触摸)菜单链接,菜单将保持打开状态。要关闭它又该怎么办? 问题答案: Bootstrap的默认设置是在单击菜单项时保持菜单打开。您可以通过调用要折叠的jQuery元素来手动覆盖此行为。

  • I',试图构建一个扩展/折叠菜单。 我有一个主导航栏,里面有3个子菜单。默认情况下,子菜单的高度为50px,但一旦点击,这个高度就会变为200px。再点击一下,让它塌陷回原来的50px。 让我烦恼的是,当我展开subMenu1,然后展开Submenu2-Submenu1保持展开,并且我希望它在第二个子菜单被选中时折叠。 这是我的代码; 和jQuery: 我想知道什么功能或什么使用来确保一旦任何子菜

  • 本文向大家介绍AngularJS折叠菜单实现方法示例,包括了AngularJS折叠菜单实现方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了AngularJS折叠菜单实现方法。分享给大家供大家参考,具体如下: 更多关于AngularJS相关内容感兴趣的读者可查看本站专题:《AngularJS指令操作技巧总结》、《AngularJS入门与进阶教程》及《AngularJS MVC架构总结

  • 我实现了这个Bootstrap 3 Navbar折叠来改变Navbar折叠,但我有一个问题,在nav上的切换。 我为最小宽度:992px放入这个,使我的菜单悬停打开,而不是切换桌面大小。 我遇到的问题是,当我在sm大小中切换一个菜单项时。下拉菜单不会直接切换到下面。它会在右手边爆炸。我似乎找不到什么是css选择器,它直接放在下面,而其他项目“移开的方式” 这就是正在发生的事情 我要这个是SM号的