Dropdowns are toggleable, contextual overlays for displaying lists of links and more. They’re made interactive with the included dropdown directives.
The easiest way to add the dropdown component to your app (will be added to the root module)
Wrap the dropdown’s toggle (your button or link) and the dropdown menu within
dropdown. Dropdowns can be triggered from <a> or <button>
elements to better fit your potential needs.
Basic
Any <button> can became a dropdown toggle with few markup changes.
Here’s how dropdown works with single button
<div class="btn-group" dropdown>
<button id="button-basic" dropdownToggle type="button" class="btn btn-primary dropdown-toggle"
aria-controls="dropdown-basic">
Button dropdown <span class="caret"></span>
</button>
<ul id="dropdown-basic" *dropdownMenu class="dropdown-menu"
role="menu" aria-labelledby="button-basic">
<li role="menuitem"><a class="dropdown-item" href="#">Action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Another action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Something else here</a></li>
<li class="divider dropdown-divider"></li>
<li role="menuitem"><a class="dropdown-item" href="#">Separated link</a>
</li>
</ul>
</div>
import { Component } from '@angular/core';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-dropdown-basic',
templateUrl: './basic.html',
standalone: false
})
export class DemoDropdownBasicComponent {}
With animation
You can enable animation via isAnimated input or config option
<div class="btn-group" dropdown>
<button id="button-animated" dropdownToggle type="button" class="btn btn-primary dropdown-toggle"
aria-controls="dropdown-animated">
Button dropdown <span class="caret"></span>
</button>
<ul id="dropdown-animated" *dropdownMenu class="dropdown-menu"
role="menu" aria-labelledby="button-animated">
<li role="menuitem"><a class="dropdown-item" href="#">Action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Another action</a>
</li>
<li role="menuitem"><a class="dropdown-item" href="#">Something else
here</a></li>
</ul>
</div>
import { Component } from '@angular/core';
import { BsDropdownConfig } from 'ngx-bootstrap/dropdown';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-dropdown-animation',
templateUrl: './animated.html',
providers: [{ provide: BsDropdownConfig, useValue: { isAnimated: true, autoClose: true } }],
standalone: false
})
export class DemoDropdownAnimatedComponent {}
Trigger by tag <a>
<span dropdown (onShown)="onShown()" (onHidden)="onHidden()" (isOpenChange)="isOpenChange()">
<a href id="basic-link" dropdownToggle (click)="false"
aria-controls="basic-link-dropdown">Click me for a dropdown, yo!</a>
<ul id="basic-link-dropdown" *dropdownMenu class="dropdown-menu"
role="menu" aria-labelledby="basic-link">
@for (choice of items; track choice) {
<li>
<a class="dropdown-item" href="#">{{choice}}</a>
</li>
}
</ul>
</span>
import { Component } from '@angular/core';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-dropdown-anchor-trigger',
templateUrl: './anchor-trigger.html',
standalone: false
})
export class DemoDropdownAnchorTriggerComponent {
items: string[] = [
'The first choice!',
'And another choice for you.',
'but wait! A third!'
];
onHidden(): void {
console.log('Dropdown is hidden');
}
onShown(): void {
console.log('Dropdown is shown');
}
isOpenChange(): void {
console.log('Dropdown state is changed');
}
}
Split button dropdowns
Similarly, create split button dropdowns with virtually the same markup as single
button dropdowns, but with the addition of .dropdown-toggle-split for proper spacing
around the dropdown caret.
<div class="btn-group" dropdown>
<button type="button" class="btn btn-danger">Action</button>
<button id="button-split" type="button" dropdownToggle class="btn btn-danger dropdown-toggle dropdown-toggle-split"
aria-controls="dropdown-split">
<span class="caret"></span>
<span class="sr-only visually-hidden">Split button!</span>
</button>
<ul id="dropdown-split" *dropdownMenu class="dropdown-menu"
role="menu" aria-labelledby="button-split">
<li role="menuitem"><a class="dropdown-item" href="#">Action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Another action</a>
</li>
<li role="menuitem"><a class="dropdown-item" href="#">Something else
here</a></li>
<li class="divider dropdown-divider"></li>
<li role="menuitem"><a class="dropdown-item" href="#">Separated link</a>
</li>
</ul>
</div>
import { Component } from '@angular/core';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-dropdown-split',
templateUrl: './split.html',
standalone: false
})
export class DemoDropdownSplitComponent {}
Manual triggering
Dropdown can be triggered by show, hide and
toggle methods from directive
Use method toggle(true) if you want to toggle the dropdown or toggle(false)
if you want to only close opened dropdown.
<div class="btn-group" dropdown #dropdown="bs-dropdown" [autoClose]="false">
<button dropdownToggle type="button" class="btn btn-primary dropdown-toggle">
Button dropdown <span class="caret"></span>
</button>
<ul id="dropdown-triggers-manual" *dropdownMenu class="dropdown-menu"
role="menu" aria-labelledby="button-triggers-manual">
<li role="menuitem"><a class="dropdown-item" href="#">Action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Another action</a>
</li>
<li role="menuitem"><a class="dropdown-item" href="#">Something else
here</a></li>
<li class="divider dropdown-divider"></li>
</ul>
</div>
<button type="button" class="btn btn-primary" (click)="dropdown.toggle(true)">Toggle</button>
<button type="button" class="btn btn-primary" (click)="dropdown.show()">Show</button>
<button type="button" class="btn btn-primary" (click)="dropdown.hide()">Hide</button>
import { Component } from '@angular/core';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-dropdown-triggers-manual',
templateUrl: './triggers-manual.html',
standalone: false
})
export class DemoDropdownTriggersManualComponent {
}
Trigger by isOpen property
Dropdown can be shown or hidden by changing isOpen input property
<div class="btn-group" dropdown #dropdown="bs-dropdown" [autoClose]="false">
<button dropdownToggle type="button" class="btn btn-primary dropdown-toggle">
Button dropdown <span class="caret"></span>
</button>
<ul *dropdownMenu class="dropdown-menu" role="menu">
<li role="menuitem"><a class="dropdown-item" href="#">Action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Another action</a>
</li>
<li role="menuitem"><a class="dropdown-item" href="#">Something else
here</a></li>
</ul>
</div>
<button type="button" class="btn btn-primary" (click)="dropdown.isOpen = !dropdown.isOpen">Toggle</button>
import { Component } from '@angular/core';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-dropdown-trigger-by-isopen',
templateUrl: './trigger-by-isopen-property.html',
standalone: false
})
export class DemoDropdownByIsOpenPropComponent {
}
Disabled menu
Use isDisabled property to make dropdown disabled.
<div class="btn-group" dropdown [isDisabled]="disabled">
<button id="button-disabled-menu" dropdownToggle type="button" class="btn btn-primary dropdown-toggle"
aria-controls="dropdown-disabled-menu">
Button dropdown <span class="caret"></span>
</button>
<ul id="dropdown-disabled-menu" *dropdownMenu class="dropdown-menu"
role="menu" aria-labelledby="button-disabled-menu">
<li role="menuitem"><a class="dropdown-item" href="#">Action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Another action</a>
</li>
<li role="menuitem"><a class="dropdown-item" href="#">Something else
here</a></li>
<li class="divider dropdown-divider"></li>
<li role="menuitem"><a class="dropdown-item" href="#">Separated link</a>
</li>
</ul>
</div>
<button type="button" class="btn btn-warning" (click)="disabled = !disabled">
Enable/Disable
</button>
import { Component } from '@angular/core';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-dropdown-disabled',
templateUrl: './disabled-menu.html',
standalone: false
})
export class DemoDropdownDisabledComponent {
disabled = false;
}
Mark item as disabled
Add a disabled class to <a> to make it as disabled.
<div class="btn-group" dropdown>
<button id="button-disabled-item" dropdownToggle type="button" class="btn btn-primary dropdown-toggle"
aria-controls="dropdown-disabled-item">
Button dropdown <span class="caret"></span>
</button>
<ul id="dropdown-disabled-item" *dropdownMenu class="dropdown-menu"
role="menu" aria-labelledby="button-disabled-item">
<li class="disabled" role="menuitem"><a class="dropdown-item disabled" href="#">Action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Another action</a>
</li>
<li role="menuitem"><a class="dropdown-item" href="#">Something else
here</a></li>
</ul>
</div>
import { Component } from '@angular/core';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-dropdown-disabled-item',
templateUrl: './disabled-item.html',
standalone: false
})
export class DemoDropdownDisabledItemComponent {}
Menu alignment
By default, a dropdown menu is automatically positioned 100% from the top and along
the left side of its parent. Add class .dropdown-menu-right to a dropdownMenu
to right align the dropdown menu.
<div class="btn-group" dropdown placement="bottom right">
<button id="button-alignment" dropdownToggle type="button"
class="btn btn-primary dropdown-toggle" aria-controls="dropdown-alignment">
This dropdown's menu is right-aligned <span class="caret"></span>
</button>
<ul id="dropdown-alignment" *dropdownMenu class="dropdown-menu dropdown-menu-right"
role="menu" aria-labelledby="button-alignment">
<li role="menuitem"><a class="dropdown-item" href="#">Action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Another action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Something else here</a></li>
<li class="divider dropdown-divider"></li>
<li role="menuitem"><a class="dropdown-item" href="#">Separated link</a></li>
</ul>
</div>
import { Component } from '@angular/core';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-dropdown-alignment',
templateUrl: './menu-alignment.html',
standalone: false
})
export class DemoDropdownAlignmentComponent {}
Inside click
By default, a dropdown menu closes on document click, even if you clicked on an element inside the dropdown.
Use [insideClick]="true" to allow click inside the dropdown
<div class="btn-group" dropdown [insideClick]="true">
<button dropdownToggle type="button" class="btn btn-primary dropdown-toggle">
Button dropdown <span class="caret"></span>
</button>
<ul *dropdownMenu class="dropdown-menu" role="menu">
<li role="menuitem"><a class="dropdown-item" href="#">Action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Another action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Something else here</a></li>
<li class="divider dropdown-divider"></li>
<li role="menuitem"><a class="dropdown-item" href="#">Separated link</a>
</li>
</ul>
</div>
import { Component } from '@angular/core';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-dropdown-inside-click',
templateUrl: './inside-click.html',
standalone: false
})
export class DemoDropdownInsideClickComponent {}
Nested dropdowns (experimental)
<div class="btn-group" dropdown [autoClose]="false" container="body">
<button id="button-nested" dropdownToggle type="button" class="btn btn-primary dropdown-toggle"
aria-controls="dropdown-nested">
This dropdown has nested submenu <span class="caret"></span>
</button>
<ul id="dropdown-nested" *dropdownMenu class="dropdown-menu"
role="menu" aria-labelledby="button-nested">
<li role="menuitem"><a class="dropdown-item" routerLink="." fragment="nested-dropdowns">Action</a></li>
<li role="menuitem" dropdown triggers="mouseover" placement="right" container="body">
<a dropdownToggle class="dropdown-item dropdown-toggle"
(click)="false">Hover me for nested dropdown <span class="caret"></span></a>
<ul *dropdownMenu class="dropdown-menu" role="menu">
<li role="menuitem"><a class="dropdown-item" routerLink="." fragment="nested-dropdowns">Action</a></li>
<li role="menuitem"><a class="dropdown-item" routerLink="." fragment="nested-dropdowns">Action1</a></li>
<li role="menuitem"><a class="dropdown-item" routerLink="." fragment="nested-dropdowns">Action2</a></li>
</ul>
</li>
<li role="menuitem" dropdown triggers="mouseover" placement="right" container="body">
<a dropdownToggle class="dropdown-item dropdown-toggle"
(click)="false">Hover me for nested dropdown <span class="caret"></span></a>
<ul *dropdownMenu class="dropdown-menu" role="menu">
<li role="menuitem"><a class="dropdown-item" routerLink="." fragment="nested-dropdowns">Action</a></li>
<li role="menuitem"><a class="dropdown-item" routerLink="." fragment="nested-dropdowns">Action1</a></li>
<li role="menuitem"><a class="dropdown-item" routerLink="." fragment="nested-dropdowns">Action2</a></li>
</ul>
</li>
<li role="menuitem"><a class="dropdown-item" routerLink="." fragment="nested-dropdowns">Something else here</a></li>
<li class="divider dropdown-divider"></li>
<li role="menuitem"><a class="dropdown-item" routerLink="." fragment="nested-dropdowns">Separated link</a></li>
</ul>
</div>
import { Component } from '@angular/core';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-nested-dropdowns',
templateUrl: './nested-dropdowns.html',
standalone: false
})
export class DemoNestedDropdownsComponent {}
Append to body
Append dropdown to body by adding container="body" to the parent element.
<div class="btn-group" dropdown container="body">
<button id="button-container" dropdownToggle type="button" class="btn btn-primary dropdown-toggle"
aria-controls="dropdown-container">
Dropdown on Body <span class="caret"></span>
</button>
<ul id="dropdown-container" *dropdownMenu class="dropdown-menu"
role="menu" aria-labelledby="button-container">
<li role="menuitem"><a class="dropdown-item" href="#">Action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Another action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Something else here</a></li>
<li class="divider dropdown-divider"></li>
<li role="menuitem"><a class="dropdown-item" href="#">Separated link</a>
</li>
</ul>
</div>
import { Component } from '@angular/core';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-dropdown-container',
templateUrl: './container.html',
standalone: false
})
export class DemoDropdownContainerComponent {}
Dropup variation
To make dropdown's menu appear above toggle element set dropup property as true
<div class="btn-group" dropdown [dropup]="isDropup">
<button id="button-dropup" dropdownToggle type="button" class="btn btn-primary dropdown-toggle"
aria-controls="dropdown-dropup">
Dropup <span class="caret"></span>
</button>
<ul id="dropdown-dropup" *dropdownMenu class="dropdown-menu"
role="menu" aria-labelledby="button-dropup">
<li role="menuitem"><a class="dropdown-item" href="#">Action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Another action</a>
</li>
<li role="menuitem"><a class="dropdown-item" href="#">Something else
here</a></li>
<li class="divider dropdown-divider"></li>
<li role="menuitem"><a class="dropdown-item" href="#">Separated link</a>
</li>
</ul>
</div>
import { Component } from '@angular/core';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-dropdown-dropup',
templateUrl: './dropup.html',
standalone: false
})
export class DemoDropdownDropupComponent {
isDropup = true;
}
Menu dividers
Separate groups of related menu items with a .dropdown-divider for bootstrap 4.
<div class="btn-group" dropdown>
<button id="button-menu-dividers" dropdownToggle type="button" class="btn btn-primary dropdown-toggle"
aria-controls="dropdown-menu-dividers">
Button dropdown <span class="caret"></span>
</button>
<ul id="dropdown-menu-dividers" *dropdownMenu class="dropdown-menu"
role="menu" aria-labelledby="button-menu-dividers">
<li role="menuitem"><a class="dropdown-item" href="#">Action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Another action</a>
</li>
<li role="menuitem"><a class="dropdown-item" href="#">Something else
here</a></li>
<li class="divider dropdown-divider"></li>
<li role="menuitem"><a class="dropdown-item" href="#">Separated link</a>
</li>
</ul>
</div>
import { Component } from '@angular/core';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-dropdown-menu-dividers',
templateUrl: './menu-dividers.html',
standalone: false
})
export class DemoDropdownMenuDividersComponent {}
Custom html
Dropdown allows you to use any html markup inside of it
<div class="btn-group" dropdown>
<button id="button-custom-html" dropdownToggle type="button" class="btn btn-primary dropdown-toggle"
aria-controls="dropdown-custom-html">
Button dropdown <span class="caret"></span>
</button>
<ul id="dropdown-custom-html" *dropdownMenu class="dropdown-menu"
role="menu" aria-labelledby="button-custom-html">
<li role="menuitem"><a class="dropdown-item" href="#">Action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Another action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#"><span class="badge badge-secondary bg-secondary">Some HTML here</span></a></li>
</ul>
</div>
import { Component } from '@angular/core';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-dropdown-custom-html',
templateUrl: './custom-html.html',
standalone: false
})
export class DemoDropdownCustomHtmlComponent {}
Configuring defaults
It is possible to override default dropdown config partially or completely.
<div class="btn-group" dropdown>
<button id="button-config" dropdownToggle type="button" class="btn btn-primary dropdown-toggle"
aria-controls="dropdown-config">
Button dropdown <span class="caret"></span>
</button>
<ul id="dropdown-config" *dropdownMenu class="dropdown-menu"
role="menu" aria-labelledby="button-config">
<li role="menuitem"><a class="dropdown-item" href="#">Action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Another action</a>
</li>
<li role="menuitem"><a class="dropdown-item" href="#">Something else
here</a></li>
</ul>
</div>
import { Component } from '@angular/core';
import { BsDropdownConfig } from 'ngx-bootstrap/dropdown';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-dropdown-config',
templateUrl: './config.html',
providers: [{ provide: BsDropdownConfig, useValue: { autoClose: false } }],
standalone: false
})
export class DemoDropdownConfigComponent {}
Visibility Events
You can subscribe to dropdown's visibility events
<div class="row">
<div class="col-xs-12 col-12">
@for (message of messages; track message) {
<pre class="card card-block card-header mb-3">{{message}}</pre>
}
</div>
<div class="col-xs-12 col-12 mb-3">
<div class="btn-group"
dropdown
(onShown)="handler('onShown')"
(onHidden)="handler('onHidden')">
<button id="button-visbility" dropdownToggle type="button" class="btn btn-primary dropdown-toggle"
aria-controls="dropdown-visbility">
Button dropdown <span class="caret"></span>
</button>
<ul id="dropdown-visbility" *dropdownMenu class="dropdown-menu"
role="menu" aria-labelledby="button-visbility">
<li role="menuitem"><a class="dropdown-item" href="#">Action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Another action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</div>
</div>
</div>
import { Component } from '@angular/core';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-dropdown-visibility-events',
templateUrl: './visibility-events.html',
standalone: false
})
export class DemoDropdownVisibilityEventsComponent {
messages: string[] = [];
message = 'onShown';
handler(value: string): void {
this.messages.push(`Event ${value} is fired`);
this.messages = this.messages.length > 2 ? this.messages.slice(0, 1) : this.messages;
}
}
State change event
You can subscribe to dropdown's state change event (isOpenChange).
<div class="row">
@if (text) {
<div class="col-xs-12 col-12 mb-3">
<pre class="card card-block card-header">The dropdown is {{text}}</pre>
</div>
}
<div class="col-xs-12 col-12 mb-2">
<div class="btn-group"
dropdown
(isOpenChange)="onOpenChange($event)">
<button id="button-state-change" dropdownToggle type="button" class="btn btn-primary dropdown-toggle"
aria-controls="dropdown-state-change">
Button dropdown <span class="caret"></span>
</button>
<ul id="dropdown-state-change" *dropdownMenu class="dropdown-menu"
role="menu" aria-labelledby="button-state-change">
<li role="menuitem"><a class="dropdown-item" href="#">Action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Another action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</div>
</div>
</div>
import { Component } from '@angular/core';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-dropdown-state-change-event',
templateUrl: './state-change-event.html',
standalone: false
})
export class DemoDropdownStateChangeEventComponent {
text?: string;
onOpenChange(data: boolean): void {
this.text = data ? 'opened' : 'closed';
}
}
Auto close
Use autoClose property to change dropdown's default behavior
Default behavior: dropdown closes after outside click or pressing ESC
This dropdown won't be closed after outside click or pressing ESC
<div class="row">
<div class="col-xs-12 col-12 col-sm-6 mb-3">
<p>Default behavior: dropdown closes after outside click or pressing ESC</p>
<div class="btn-group" dropdown>
<button id="button-autoclose1" dropdownToggle type="button" class="btn btn-primary dropdown-toggle"
aria-controls="dropdown-autoclose1">
Button dropdown <span class="caret"></span>
</button>
<ul id="dropdown-autoclose1" *dropdownMenu class="dropdown-menu"
role="menu" aria-labelledby="button-autoclose1">
<li role="menuitem"><a class="dropdown-item" href="#">Action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Another action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</div>
</div>
<div class="col-xs-12 col-12 col-sm-6 mb-3">
<p>This dropdown won't be closed after outside click or pressing ESC</p>
<div class="btn-group" dropdown [autoClose]="false">
<button id="button-autoclose2" dropdownToggle type="button" class="btn btn-primary dropdown-toggle"
aria-controls="dropdown-autoclose2">
Button dropdown <span class="caret"></span>
</button>
<ul id="dropdown-autoclose2" *dropdownMenu class="dropdown-menu" role="menu" aria-labelledby="button-autoclose2">
<li role="menuitem"><a class="dropdown-item" href="#">Action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Another action</a></li>
<li role="menuitem"><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</div>
</div>
</div>
import { Component } from '@angular/core';
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: 'demo-dropdown-autoclose',
templateUrl: './autoclose.html',
standalone: false
})
export class DemoDropdownAutoCloseComponent {}
Accessibility
The WAIARIA standard defines an actual role="menu" widget, but this is specific to application-like menus which trigger actions or functions. ARIA menus can only contain menu items, checkbox menu items, radio button menu items, radio button groups, and sub-menus.
Dropdowns, on the other hand, are designed to be generic and applicable to a variety of situations and markup structures. For instance, it is possible to create dropdowns that contain additional inputs and form controls, such as search fields or login forms. For this reason, ngx-bootstrap does not expect (nor automatically add) any of the role and aria- attributes required for true ARIA menus. Authors will have to include these more specific attributes themselves.
Installation
ng add ngx-bootstrap --component dropdowns
### Standalone component usage
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
@Components({
standalone: true,
imports: [
BrowserAnimationsModule,
BsDropdownModule,
...
]
})
export class AppComponents(){}
### Module usage
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
@NgModule({
imports: [
BrowserAnimationsModule,
BsDropdownModule
]
})
export class AppModule(){}
Also should be added web-animations-js polyfill for IE browser (Edge)
BsDropdownConfig
Default dropdown configuration
Properties
autoClose | Type: booleanDefault value: truedefault dropdown auto closing behavior |
insideClick | Type: booleanDefault value: falsedefault dropdown auto closing behavior |
isAnimated | Type: booleanDefault value: falseturn on/off animation |
stopOnClickPropagation | Type: booleanDefault value: falsevalue true of stopOnClickPropagation allows event stopPropagation |
Basic
With animation
Trigger by tag <a>
Split button dropdowns
Manual triggering
Trigger by isOpen property
Disabled menu
Mark item as disabled
Menu alignment
Inside click
Nested dropdowns (experimental)
Append to body
Dropup variation
Menu dividers
Custom html
Configuring defaults
Visibility Events
State change event
Auto close
Default behavior: dropdown closes after outside click or pressing ESC
This dropdown won't be closed after outside click or pressing ESC
- Basic
- With animation
- Trigger by tag <a>
- Split button dropdowns
- Manual triggering
- Trigger by isOpen property
- Disabled menu
- Mark item as disabled
- Menu alignment
- Inside click
- Nested dropdowns (experimental)
- Append to body
- Dropup variation
- Menu dividers
- Custom html
- Configuring defaults
- Visibility Events
- State change event
- Auto close
- Accessibility
