📢 Angular Choices
Angular wrapper for choices.js - vanilla, lightweight, configurable select box/text input plugin. Similar to Select2 and Selectize but without the jQuery dependency.
Live Demo - https://stackblitz.com/edit/nb-choices
🍭 Features
- Angular forms support
- Custom Angular templates
- Placeholder support out of the box
- Works with observables and the async pipe
- Custom checkbox in multiple dropdowns
- Escaping your HTML out of the box
- Modern styling
Installation
npm install nb-choices
yarn add nb-choices
Style
@import '~nb-choices/nb-choices.scss'
Examples
Single Select
<choices [formControl]="control"
[choices]="options"
placeholder="Choose..."></choices>
Single Select - Combo box
<choices [formControl]="control"
[isCombo]="true"
[choices]="options"
placeholder="Choose..."></choices>
Single Select - Group
this.options = [{
label: 'Group one',
id: 1,
choices: [
{ value: 'Child One', label: 'Child One' },
{ value: 'Child Two', label: 'Child Two' },
]
},
{
label: 'Group two',
id: 2,
choices: [
{ value: 'Child Four', label: 'Child Three' },
{ value: 'Child Five', label: 'Child Four' },
]
}];
<choices [formControl]="control"
[choices]="options"
placeholder="Choose..."></choices>
With Custom Template
this.options = [{
value: 'chrome',
label: 'Chrome',
customProperties: {
icon: 'chrome'
}
},
{
value: 'explorer',
label: 'Explorer',
customProperties: {
icon: 'internet-explorer'
}
}];
<ng-template #tpl let-data>
<i class="fa fa-{{data.customProperties?.icon}}"></i> {{data.label}}
</ng-template>
<choices [formControl]="control"
[isCombo]="true"
[choiceTemplate]="tpl"
[choices]="options"
placeholder="Choose..."></choices>
With Observables
ngOnInit() {
this.loading = true;
this.options$ = timer(500).mapTo(this.options).do(() => {
this.loading = false
});
}
<choices [formControl]="control"
[isCombo]="true"
[loading]="loading"
[choices]="options$ | async"
placeholder="Choose..."></choices>
Multiple Select
<choices [isMultiple]="true"
[choices]="options"
[isCombo]="true"
[formControl]="control"
placeholder="Choose skills..."></choices>
Multiple Select - With Checkbox
<choices [isMultiple]="true"
[choices]="options"
[withCheckbox]="true"
[isCombo]="true"
[formControl]="control"
placeholder="Choose skills..."></choices>
Controls
<choices [formControl]="control"
[isCombo]="true"
#choices="choices"
[choices]="options"
placeholder="Choose..."></choices>
<button (click)="choices.toggleDropdown(true)">Show</button>
<button (click)="choices.toggleDropdown()">Hide</button>
<button (click)="choices.disable()">Disable</button>
<button (click)="choices.enable()">Enable</button>
<button (click)="choices.clear()">Reset</button>
<button (click)="choicesMultiple.clearMultiple()">Reset multiple select</button>
Text
<choices [text]="true" [items]="textOptions" [formControl]="controText" #choicesText="choices"></choices>
<button (click)="choicesText.clearMultiple()">Reset</button>
Configuration
The default configurations of nb-choices
for selects are:
{
placeholderValue: context.placeholder,
searchEnabled: context.isCombo,
searchPlaceholderValue: context.searchPlaceholder,
silent: true,
removeItems: true,
removeItemButton: true,
duplicateItems: false,
resetScrollPosition: false,
searchResultLimit: 10000,
fuseOptions: {
threshold: 0.2,
},
shouldSort: false,
shouldSortItems: false,
renderSelectedChoices: 'always',
loadingText: 'Loading...',
noResultsText: 'No results found',
noChoicesText: 'No choices to choose from',
itemSelectText: '',
}
The default configurations of nb-choices
for texts are:
{
duplicateItems: false,
removeItemButton: true,
}
You can extend the configurations by providing the CHOICES_CONFIG
provider for selects or the CHOICES_TEXT_CONFIG
for texts.
For example:
providers: [{provide: CHOICES_CONFIG, useValue: { removeItems: false }}]
Options
@Inputs() | Description | Default |
---|
isMultiple | Whether the select should be multiple | false |
placeholder | The value to show when the control is empty | Choose.. |
isCombo | Whether to show the search box | true |
text | Whether is a text type | false |
searchPlaceholder | The value to show on the search input | Search.. |
labelKey | The label which bound to the option text | label |
valueKey | The value which bound to the option value | value |
choices | The list of choices | [] |
items | The list of items (relevant for text) | [] |
choiceTemplate | TemplateRef that will replace the default view | null |
loadingText | The loading text | Loading.. |
textConfig | The text config | {} |
withCheckbox | Whether to show a checkbox in multiple dropdown | false |
loading | Whether to show the loading text | false |
@Outputs() | Description |
---|
onSearch | Triggered when a user types into an input to search choices |
Custom Styling
You can customize the style by modifying the nb-choices.scss
and include it in your application.
TODO