angular 7+: ngbDropdown 菜单折叠而不是弹出
angular 7+: ngbDropdown menu collapse instead of popover
我正在使用 ngb 下拉菜单在屏幕上显示用户列表。当用户单击下拉菜单时,它会显示用户详细信息表单。
问题 是,此表单会在其他用户和内容之上弹出。我 需要 用户详细信息 collapse 而不是 popover.
我尝试设置 aria-haspopup=false 但这没有任何作用,事实上它在检查器中仍然显示为 true,所以我对它的作用以及现在如何实现它感到有点困惑?我正在考虑像在导航栏切换器中那样使用数据切换和折叠之类的东西,但不确定如何在 ngbDropdown 菜单中正确实现它....
image link for desired result1
<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>
从您分享的 description/image 看来,您需要手风琴,而不是 pop-over...因为手风琴具有可折叠的效果,而下拉菜单始终是 pop-over
相关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);
}
}
}
update: 鉴于下面提问者的评论
我正在使用 ngb 下拉菜单在屏幕上显示用户列表。当用户单击下拉菜单时,它会显示用户详细信息表单。
问题 是,此表单会在其他用户和内容之上弹出。我 需要 用户详细信息 collapse 而不是 popover.
我尝试设置 aria-haspopup=false 但这没有任何作用,事实上它在检查器中仍然显示为 true,所以我对它的作用以及现在如何实现它感到有点困惑?我正在考虑像在导航栏切换器中那样使用数据切换和折叠之类的东西,但不确定如何在 ngbDropdown 菜单中正确实现它....
image link for desired result1
<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>
从您分享的 description/image 看来,您需要手风琴,而不是 pop-over...因为手风琴具有可折叠的效果,而下拉菜单始终是 pop-over
相关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);
}
}
}
update: 鉴于下面提问者的评论