Components.Button public
Implements a HTML button element, with support for all Bootstrap button CSS styles as well as advanced functionality such as button states.
Basic Usage
<BsButton @type="primary" @icon="glyphicon glyphicon-download">
Downloads
</BsButton>
Actions
Use the onClick
property of the component to send an action to your controller. It will receive the button's value
(see the value
property) as an argument.
<BsButton @type="primary" @icon="glyphicon glyphicon-download" @onClick=(action "download")>
Downloads
</BsButton>
Promise support for automatic state change
When returning a Promise for any asynchronous operation from the onClick
closure action the button will
manage an internal state ("default" > "pending" > "fulfilled"/"rejected") automatically.
The button is disabled by default if it's in pending state. You could override this behavior by passing
the disabled
HTML attribute or by setting @preventConcurrency
to false.
<BsButton
disabled={{false}}
/>
<BsButton
@preventConcurrency={{false}}
/>
The label could be changed automatically according to the state of the promise with @defaultText
,
@pendingText
, @fulfilledText
and @rejectedText
arguments:
<BsButton
@type="primary"
@icon="glyphicon glyphicon-download"
@defaultText="Download"
@pendingText="Loading..."
@fulfilledText="Completed!"
@rejectedText="Oups!?"
@onClick={{this.download}}
/>
// controller.js
import { Controller } from '@ember/controller';
import { action } from '@ember/object';
export default class MyController extends Controller {
@action
download(value) {
return new Promise(...);
}
});
For further customization isPending
, isFulfilled
, isRejected
and isSettled
properties are yielded:
<BsButton @onClick=(action "download") as |button|>
Download
{{#if button.isPending}}
<span class="loading-spinner"></span>
{{/if}}
</BsButton>
You can reset
the state represented by these properties and used for button's text by setting reset
property to
true
.
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
Events
click
privateresetState
privateThis will reset the state property to 'default', and with that the button's label to defaultText
_disabled ?boolean private
Property to disable the button only used in internal communication between Ember Boostrap components.
active boolean public
Set the 'active' class to apply active/pressed CSS styling
block boolean public
Property for block level buttons (BS3 and BS4 only!)
See the Bootstrap docs
bubble boolean public
A click event on a button will not bubble up the DOM tree if it has an onClick
action handler. Set to true to
enable the event to bubble
defaultText string public
Default label of the button. Not need if used as a block component
fulfilledText string public
Label of the button used if onClick
event has returned a Promise which succeeded.
Not considered if used as a block component.
icon String public
Class(es) (e.g. glyphicons or font awesome) to use as a button icon This will render a element in front of the button's label
iconActive String public
If button is active and this is set, the icon property will match this property
iconInactive String public
If button is inactive and this is set, the icon property will match this property
isFulfilled Boolean private
Promise returned by onClick
event has been succeeded.
isPending Boolean private
Promise returned by onClick
event is pending.
isRejected Boolean private
Promise returned by onClick
event has been rejected.
isSettled Boolean private
Promise returned by onClick
event has been succeeded or rejected.
outline boolean public
Property to create outline buttons (BS4+ only)
pendingText string public
Label of the button used if onClick
event has returned a Promise which is pending.
Not considered if used as a block component.
preventConcurrency Boolean public
Controls if onClick
action is fired concurrently. If true
clicking button multiple times will not trigger
onClick
action if a Promise returned by previous click is not settled yet.
This does not affect event bubbling.
rejectedText string public
Label of the button used if onClick
event has returned a Promise which failed.
Not considered if used as a block component.
reset boolean public
Set this to true
to reset the state
. A typical use case is to bind this attribute with ember-data isDirty flag.
The old value is not taken into consideration. Setting a true
value to true
again will also reset state
.
In that case it's even to notify the observer system that the property has changed by calling
notifyPropertyChange()
.
size String public
Property for size styling, set to 'lg', 'sm' or 'xs'
Also see the Bootstrap docs
state String private
State of the button. The button's label (if not used as a block component) will be set to the
<state>Text
property.
This property will automatically be set when using a click action that supplies the callback with a promise.
Possible values are: "default" > "pending" > "fulfilled" / "rejected".
It could be resetted by reset
property.
type String public
Property for type styling
For the available types see the Bootstrap docs
value any public
Supply a value that will be associated with this button. This will be sent as a parameter of the default action triggered when clicking the button
onClick
public
When clicking the button this action is called with the value of the button (that is the value of the "value" property).
Return a promise object, and the buttons state will automatically set to "pending", "resolved" and/or "rejected".
This could be used to automatically set the button's text depending on promise state (defaultText
, pendingText
,
fulfilledText
, rejectedText
) and for further customization using the yielded isPending
, isFulfilled
,
isRejected
properties.
The click event will not bubble up, unless you set bubble
to true.
Event Payload:
-
value