Components.Dropdown public
Bootstrap style dropdown menus, consisting of a toggle element, and the dropdown menu itself.
Usage
Use this component together with the yielded contextual components:
Furthermore references to the following actions are yielded:
toggleDropdown
openDropdown
closeDropdown
<BsDropdown as |dd|>
<dd.toggle>Dropdown <span class="caret"></span></dd.toggle>
<dd.menu as |ddm|>
<ddm.item>
<ddm.linkTo @route="index">Something</ddm.linkTo>
</ddm.item>
<ddm.item>
<ddm.linkTo @route="index">Something different</ddm.linkTo>
</ddm.item>
</dd.menu>
</BsDropdown>
If you need to use dropdowns in a nav, use the bs-nav.dropdown
contextual component rather than a standalone dropdown to ensure the correct styling
regardless of your Bootstrap version.
Note: the use of angle brackets
<ddm.linkTo>
as shown above is only supported for Ember >= 3.10, as it relies on its Ember's native implementation of theLinkComponent
. For older Ember versions please use the legacy syntax with positional arguments:{{#ddm.link-to "bar" this.model}}Bar{{/ddm.link-to}}
Button dropdowns
To use a button as the dropdown toggle element (see http://getbootstrap.com/components/#btn-dropdowns), use the
Components.DropdownButton
component as the toggle:
<BsDropdown as |dd|>
<dd.button>Dropdown <span class="caret"></span></dd.button>
<dd.menu as |ddm|>
<ddm.item>
<ddm.linkTo @route="index">Something</ddm.linkTo>
</ddm.item>
<ddm.item>
<ddm.linkTo @route="index">Something different</ddm.linkTo>
</ddm.item>
</dd.menu>
</BsDropdown>
It has all the functionality of a Components.Button
with additional dropdown support.
Split button dropdowns
To have a regular button with a dropdown button as in http://getbootstrap.com/components/#btn-dropdowns-split, use a
Components.Button
component and a Components.DropdownButton
:
<BsDropdown as |dd|>
<BsButton>Dropdown</BsButton>
<dd.button>Dropdown <span class="caret"></span></dd.button>
<dd.menu as |ddm|>
<ddm.item>
<ddm.linkTo @route="index">Something</ddm.linkTo>
</ddm.item>
<ddm.item>
<ddm.linkTo @route="index">Something different</ddm.linkTo>
</ddm.item>
</dd.menu>
</BsDropdown>
Dropup style
Set the direction
property to "up" to switch to a "dropup" style:
<BsDropdown @direction="up" as |dd|>
...
</BsDropdown>
Open, close or toggle the dropdown programmatically
If you wanted to control when the dropdown opens and closes programmatically, the bs-dropdown
component yields the
openDropdown
, closeDropdown
and toggleDropdown
actions which you can then pass to your own handlers. For example:
<BsDropdown @closeOnMenuClick={{false}} as |dd|>
<BsButton>Dropdown</BsButton>
<dd.button>Dropdown <span class="caret"></span></dd.button>
<dd.menu as |ddm|>
{{#each this.items as |item|}}
<ddm.item>
<a href {{on "click" (fn this.changeItems item dd.closeDropdown)}}>
{{item.text}}
</a>
</ddm.item>
{{/each}}
</dd.menu>
</BsDropdown>
Then in your controller or component, optionally close the dropdown:
...
actions: {
handleDropdownClicked(item, closeDropdown) {
if(item.isTheRightOne) {
this.chosenItems.pushObject(item);
closeDropdown();
} else {
this.set('item', this.getRandomItems());
}
},
}
Bootstrap 3/4 Notes
If you need to use dropdowns in a nav, use the bs-nav.dropdown
contextual component rather than a standalone dropdown to ensure the correct styling
regardless of your Bootstrap version.
If you use the dropdown divider, you don't have to worry about differences in the markup between versions.
Be sure to use the dropdown menu link-to, for in-application
links as dropdown menu items. This is essential for proper styling regardless of Bootstrap
version and will also provide automatic active
highlighting on dropdown menu items. If you
wish to have a dropdown menu item refer to an external link, be sure to apply the dropdown-item
class to the <a>
tag for Bootstrap 4 compatibility.
The dropdown menu will be positioned using the popper.js
library, just as the original Bootstrap
version does. This also allows you to set renderInPlace=false
on the menu component to render it in a wormhole,
which you might want to do if you experience clipping issues by an outer overflow: hidden
element.
Note that only invoking the component in a template as shown above is considered part of its public API. Extending from it (subclassing) is generally not supported, and may break at any time.
Item Index
Methods
Properties
closeOnClickHandler
protectedHandler for click events to close the dropdown
Parameters:
-
e
Object
closeOnMenuClick boolean public
By default, clicking on an open dropdown menu will close it. Set this property to false for the menu to stay open.
containerClass string private
A computed property to generate the suiting class for the dropdown container, either
- "dropdown"
- "dropup"
- "dropstart" (BS5) or "dropleft" (BS4)
- "dropend" (BS5) or "dropright" (BS4)
direction string public
By default, the dropdown menu will expand downwards. Other options include, 'up', 'left' and 'right'
htmlTag {string} public
The tag name used for the dropdown element.
isOpen boolean private
This property reflects the state of the dropdown, whether it is open or closed.
toggleComponent {String} private
toggleElement unknown private
onHide
public
Action is called when dropdown is about to be hidden
Returning false
will block closing the dropdown
Event Payload:
-
value
onShow
public
Action is called when dropdown is about to be shown
Event Payload:
-
value