Implementing Syncfusion Angular Dropdowns
Security & Trust Boundary
Default posture: local data only
All dropdown components in this skill default to local, in-memory data sources.
Binding a component to a remote HTTP endpoint (via
or any Observable/HTTP
source) is a
non-default, elevated-risk operation that requires an explicit security
review before it is permitted in production code.
⛔
Do not generate or suggest remote / HTTP data-source configurations
unless the consuming application has passed a security review confirming that:
- The target endpoint is owned and operated by the same team as the application.
- The endpoint enforces authentication, authorization, and input validation.
- All responses are sanitized before being bound to a component .
- A Content Security Policy (CSP) covering the origin is in place.
Mandatory security requirements
| # | Requirement |
|---|
| 1 | Local data by default. Use plain TypeScript arrays for unless a remote source has been explicitly approved. |
| 2 | No public or third-party URLs. Never configure a data source that fetches from an endpoint outside the application's own origin. |
| 3 | Sanitize all external data before binding. Any value that originates outside the application (API response, local-storage read) must be stripped of HTML/script content before assignment to or . |
| 4 | Sanitize user filter input. Before forwarding typed text to any server query, strip non-alphanumeric characters to prevent injection. |
| 5 | No by default. CORS relaxation in must be explicitly justified and reviewed. |
| 6 | Pin package versions. Every dependency must be locked to an exact version in ; verify against the lockfile after every install. |
| 7 | No CDN asset loading without SRI. CSS/JS must be resolved from at build time, not fetched from a CDN at runtime without Subresource Integrity hashes. |
| 8 | No sensitive data in local storage. must never store tokens, credentials, or PII; sanitize any value read back before use. |
AutoComplete
A text input component that provides matching suggestions as the user types. Supports free-form input, remote data, filtering strategies, grouping, virtual scrolling, and full Angular forms integration.
Component Overview & Architecture
The AutoComplete is a text input component that provides matching suggestions as the user types. It is designed for:
- Type-ahead suggestions — shows matching items from a data source as the user types
- Free-form input — users can type any value, not restricted to the list
- Search/filter — multiple filter strategies (StartsWith, Contains, EndsWith)
- Autofill — automatically completes the first matched suggestion in the input
- Grouped suggestions — categorize items by a field
- Virtual scrolling — efficiently handles thousands of items
- Template customization — item, group, header, footer, and empty-state templates
Key Characteristics
| Aspect | Details |
|---|
| Selection | Single item; user can also type any free-form value |
| Data Sources | Local arrays, remote DataManager, OData, Web API, Observable (async pipe) |
| Filtering | Built-in filtering: , , |
| Autofill | Completes the first match inline as the user types |
| Performance | Virtual scrolling for large datasets (1,000+ items) |
| Forms | Template-driven () and reactive () form integration |
| Accessibility | WCAG 2.2 compliant, full keyboard navigation, ARIA attributes |
| Customization | Item, group, header, footer, noRecords, actionFailure templates; CSS theming |
Documentation Navigation Guide
📄 Getting Started
Read: references/autocomplete-getting-started.md
- Install
@syncfusion/ej2-angular-dropdowns
package
- Set up Angular 21+ project with standalone components
- Import and required CSS themes
- Create your first AutoComplete with basic data binding
- Configure popup height, width, and placeholder
- Enable two-way binding with
📄 Data Binding
Read: references/autocomplete-data-binding.md
- Bind to local arrays (strings, numbers, objects, complex objects)
- Map , , and fields via property
- Remote data using DataManager with OData, Web API adapters
- Async pipe pattern for RxJS Observables
- Object binding with
- Preselecting values using the property
📄 Filtering & Search
Read: references/autocomplete-filtering-and-search.md
- Configure (StartsWith, Contains, EndsWith)
- Limit suggestion count with
- Minimum character threshold with
- Case-sensitive filtering with
- Diacritics/accent-insensitive filtering with
- Debounce delay to optimize remote filtering with
- Custom filtering via the event with
📄 Grouping & Templates
Read: references/autocomplete-grouping-and-templates.md
- Group suggestions by category using
- Item templates for custom rendering
- Group header templates (inline and fixed)
- Header and footer templates for the popup
- Empty state with
- Action failure template for remote data errors
📄 Feature Configuration
Read: references/autocomplete-feature-configuration.md
- Autofill: inline suggestion completion with property
- Highlight matched characters with property
- Disable individual items with or method
- Disable entire component with property
- Resizable popup with
- Virtual scrolling for large datasets with
- Show/hide popup button with
- Show/hide clear button with
- RTL support with
- Sort order with
📄 Form Support & Validation
Read: references/autocomplete-form-support-and-validation.md
- Template-driven forms using and
- Reactive forms using , , and
- Binding and validation patterns
- Pre-selecting values via form model
📄 Accessibility & Localization
Read: references/autocomplete-accessibility-and-localization.md
- WCAG 2.2, Section 508, and ADA compliance
- Full keyboard shortcuts (Arrow keys, Tab, Enter, Escape, Alt+Down/Up)
- ARIA attributes: , , ,
- Screen reader support and focus management
- Localization with for and
- RTL language support
📄 Advanced Patterns & How-To
Read: references/autocomplete-advanced-patterns-how-to.md
- Autofill feature with the property
- Highlight searched characters with the property
- Multi-field custom filtering with (filter by both Name and Code)
- Icon support via
- Suggestion list on focus from browser local storage
⚠️
Security note: Local storage is accessible to any JavaScript running on the same
origin and is a common XSS attack surface. Never store sensitive data (tokens, PII) in
local storage. Sanitize any values read from local storage before binding them to the
component's
or
.
- Custom search and highlight styling
📄 API Reference
Read: references/autocomplete-api.md
- Complete properties reference with types, defaults, and descriptions
- All methods with signatures and usage
- All events with payload types and handler examples
Quick Start Example
typescript
// app.component.ts (Angular 21 Standalone)
import { Component } from '@angular/core';
import { AutoCompleteModule } from '@syncfusion/ej2-angular-dropdowns';
@Component({
selector: 'app-root',
standalone: true,
imports: [AutoCompleteModule],
template: `
<ejs-autocomplete
id="sports"
[dataSource]="sportsData"
placeholder="Find a sport"
[(value)]="selectedValue">
</ejs-autocomplete>
`
})
export class AppComponent {
public sportsData: string[] = [
'Badminton', 'Basketball', 'Cricket',
'Football', 'Golf', 'Hockey', 'Tennis'
];
public selectedValue: string = '';
}
Install the package:
⚠️
Security note: Pin the package to a specific version to prevent unintended upgrades
to potentially compromised releases. Verify the installed version against your lockfile
(
/
) after installation.
bash
ng add @syncfusion/ej2-angular-dropdowns@<version>
Add CSS (styles.css):
⚠️
Security note: These imports are resolved from
at build time.
Ensure the installed Syncfusion packages match your pinned versions in
or
before building. Do not source these files from a CDN without
Subresource Integrity (SRI) hashes.
css
@import '../node_modules/@syncfusion/ej2-base/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-inputs/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-dropdowns/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-lists/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-popups/styles/material3.css';
Common Patterns
Pattern 1: Filter with Complex Object Data
typescript
// Map fields for object array
public fields: Object = { value: 'Game' };
public sportsData: { [key: string]: Object }[] = [
{ Id: 'Game1', Game: 'Badminton' },
{ Id: 'Game2', Game: 'Cricket' }
];
html
<ejs-autocomplete [dataSource]="sportsData" [fields]="fields" placeholder="Find a game">
</ejs-autocomplete>
When to use: Whenever your data is an array of objects and you need to display one field as the suggestion text.
Pattern 2: Autofill + Highlight
html
<ejs-autocomplete
[dataSource]="data"
[autofill]="true"
[highlight]="true"
filterType="StartsWith">
</ejs-autocomplete>
When to use: Search bars where users expect inline completion and visual emphasis on matched text.
Pattern 3: Remote Data with Debounce
🔒
Security policy — remote data is a restricted pattern.
Binding AutoComplete to a remote endpoint requires a security review (see
Security & Trust Boundary above) before use in production.
Remote data binding details and requirements are documented in
references/autocomplete-data-binding.md.
No remote example is provided here by default.
When to use: API-backed autocomplete where you want to reduce request frequency — only after the endpoint and data pipeline have been reviewed per the security requirements above.
Pattern 4: Virtual Scrolling for Large Datasets
typescript
import { AutoCompleteComponent, VirtualScroll } from '@syncfusion/ej2-angular-dropdowns';
AutoCompleteComponent.Inject(VirtualScroll);
html
<ejs-autocomplete
[dataSource]="records"
[fields]="fields"
[enableVirtualization]="true"
popupHeight="200px">
</ejs-autocomplete>
When to use: Datasets with 1,000+ items where rendering all DOM elements at once is costly.
Key Properties Quick Reference
| Property | Type | Default | Purpose |
|---|
| Array | DataManager | | Source data for suggestions |
| FieldSettingsModel | | Map data columns to component |
| string | | Hint text when empty |
| string | number | boolean | object | | Selected/typed value |
| FilterType | | How suggestions are matched |
| number | | Minimum chars to trigger suggestions |
| number | | Max suggestions shown |
| boolean | | Inline completion of first match |
| boolean | | Highlight matched characters |
| boolean | | Case-insensitive filtering |
| boolean | — | Ignore diacritics in filtering |
| number | | Delay (ms) before filtering fires |
| boolean | | Virtual scroll for large data |
| boolean | | Resizable popup |
| boolean | | Show ✕ to clear value |
| boolean | | Show dropdown toggle button |
| boolean | | Enable/disable entire component |
| boolean | | Prevent user edits |
| boolean | | Bind value as full object |
| SortOrder | | Sort suggestions (Ascending/Descending) |
| string | number | | Popup list height |
| string | number | | Popup list width |
| string | | Localization culture |
| boolean | | Right-to-left rendering |
Workflow Decision Tree
Need to implement AutoComplete?
│
├─ What's your data source?
│ ├─ Local array → See Data Binding: "Array of string" or "Array of object"
│ └─ Remote API → See Data Binding: "Bind to remote data"
│
├─ How should filtering work?
│ ├─ Default (Contains) → No extra config needed
│ ├─ StartsWith → filterType="StartsWith"
│ ├─ Custom multi-field → See Advanced Patterns: "Custom filtering"
│ └─ Accent-insensitive → [ignoreAccent]="true"
│
├─ Need autofill (inline completion)?
│ └─ YES → [autofill]="true" + filterType="StartsWith"
│
├─ Highlight matched text?
│ └─ YES → [highlight]="true"
│
├─ Large dataset (1,000+ items)?
│ └─ YES → [enableVirtualization]="true" + inject VirtualScroll
│
├─ Using inside a form?
│ ├─ Template-driven → See Form Support: "ngModel"
│ └─ Reactive → See Form Support: "FormControl"
│
└─ Need accessibility or localization?
└─ YES → See Accessibility & Localization reference
ComboBox
A flexible dropdown component that allows users to select from a predefined list or enter a custom value. Supports filtering, grouping, templates, virtual scrolling, and full Angular forms integration.
Component Overview & Architecture
The ComboBox is a flexible dropdown component that allows users to:
- Select from a list of predefined options
- Enter custom values when is enabled
- Search/filter items as they type
- Group items by category
- Customize display with templates for items, groups, headers, footers
Key Characteristics
| Aspect | Details |
|---|
| Selection | Single item from predefined list or custom value |
| Data Sources | Local arrays, remote DataManager, OData, Web API, async data |
| Filtering | Built-in filtering with configurable strategies (StartsWith, Contains, EndsWith) |
| Performance | Virtual scrolling for large datasets (10,000+ items) |
| Forms | Works with template-driven forms (ngModel) and reactive forms (FormControl) |
| Accessibility | WCAG 2.2 compliant, full keyboard navigation, ARIA attributes |
| Customization | Templates for items, groups, headers; CSS theming support |
Documentation Navigation Guide
📄 Getting Started
Read: references/combobox-getting-started.md
- Install
@syncfusion/ej2-angular-dropdowns
package
- Set up Angular 21+ project with standalone components
- Import required modules and CSS themes
- Create your first ComboBox with minimal code
- Basic event handlers and configuration
📄 Data Binding & Sources
Read: references/combobox-data-binding.md
- Bind to local arrays (strings, numbers, objects)
- Map text and value fields for complex data
- Remote data from Web APIs, OData services
- DataManager configuration for different data adapters
- Async pipe for RxJS Observables
- Handling dynamic data updates
📄 Filtering & Search
Read: references/combobox-filtering-and-search.md
- Enable filtering with property
- Configure filter types (StartsWith, Contains, EndsWith, etc.)
- Case-sensitive filtering for strict matching
- Diacritics filtering for accent-insensitive search
- Debounce delay to optimize remote requests
- Minimum filter character requirements
- Custom filtering with remote queries
📄 Grouping & Templates
Read: references/combobox-grouping-and-templates.md
- Group items by category using field
- Item templates for custom item rendering
- Group header templates (inline and fixed)
- Footer templates for additional information
- Combining multiple templates effectively
- Template performance optimization
📄 Advanced Feature Configuration
Read: references/combobox-feature-configuration.md
- Disable specific items or the entire component
- Read-only mode for display-only scenarios
- Virtual scrolling for thousands of items
- Dynamic resize behavior
- Allow custom values not in the list
- Styling and theme integration
- RTL support for Arabic/Hebrew
📄 Form Support & Validation
Read: references/combobox-form-support-and-validation.md
- Two-way binding with template-driven forms (ngModel)
- Reactive forms with FormControl and FormGroup
- Built-in and custom validators
- Form submission and validation state
- Disabled ComboBox in form context
- Error message display patterns
📄 Accessibility & Localization
Read: references/combobox-accessibility-and-localization.md
- WCAG 2.2, Section 508, and ADA compliance
- Keyboard navigation shortcuts (arrow keys, Tab, Enter, Escape)
- Screen reader support with ARIA attributes
- Focus management and visual indicators
- Localization strings for different languages
- Right-to-left (RTL) language support
📄 Advanced Patterns & How-To Guides
Read: references/combobox-advanced-patterns-and-how-to.md
- Autofill suggestions for autocomplete behavior
- Cascading ComboBoxes with dependent dropdowns
- Icons and emoji support in list items
- Resizable popup for better visibility
- Real-world patterns (search, live data, grouping)
- Performance optimization techniques
📄 API Reference
Read: references/combobox-api.md
- Complete properties reference with types, defaults, and examples
- All methods with signatures, parameters, and usage examples
- All events with payload types and handler examples
- Notes on template syntax, two-way binding, and virtual scrolling
- Links to official Syncfusion documentation
Quick Start Example
Minimal Setup (5 minutes)
typescript
// app.component.ts
import { Component } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ComboBoxComponent, ComboBoxModule } from '@syncfusion/ej2-angular-dropdowns';
@Component({
selector: 'app-root',
standalone: true,
imports: [CommonModule, ComboBoxModule],
template: `
<ejs-combobox
[dataSource]="data"
fields="{ text: 'text', value: 'id' }"
placeholder="Select a language"
[(ngModel)]="selectedValue">
</ejs-combobox>
`
})
export class AppComponent {
selectedValue = '';
data = [
{ id: '1', text: 'JavaScript' },
{ id: '2', text: 'TypeScript' },
{ id: '3', text: 'Angular' },
{ id: '4', text: 'React' }
];
}
What's happening:
- Import from
@syncfusion/ej2-angular-dropdowns
- Define data array with objects (id, text)
- Use to map text and value fields
- Bind selected value with
- Set placeholder for empty state
Common Patterns & Workflows
Pattern 1: Autocomplete with Autofill
typescript
[autofill]="true" // Auto-complete suggestions
[allowFiltering]="true" // Enable typing
filterType="StartsWith" // Match from beginning
When to use: Skills, tags, email domains (user types 'j', sees 'JavaScript')
See: Advanced Patterns
Pattern 2: Cascading Dependent Dropdowns
typescript
// Country → State → City relationship
onCountryChange() {
this.states = this.getStatesFor(country);
}
onStateChange() {
this.cities = this.getCitiesFor(state);
}
When to use: Address selection, hierarchical data (country/state/city)
See: Advanced Patterns
Pattern 3: Grouped Items with Icons
typescript
fields = {
text: 'Name',
value: 'Id',
groupBy: 'Category',
iconCss: 'Icon'
};
When to use: Visual organization (languages with icons, file types)
See: Advanced Patterns
Pattern 4: Resizable Dropdown for Long Content
typescript
[allowResize]="true" // Enable resize handle
itemTemplate="customTemplate" // Show rich content
When to use: Product listings, descriptions, detailed information
See: Advanced Patterns
Key Props & Configuration
Essential Properties
| Property | Type | Default | When to Use |
|---|
| Array | DataManager | | Specify items to display |
| Object | | Map data structure to ComboBox |
| string | | Show hint when empty |
| boolean | | Enable search/filter |
| boolean | | Allow values not in list |
| boolean | | Prevent editing |
| boolean | | Disable entire component |
| any | undefined | Two-way value binding |
Advanced Properties
| Property | Type | When to Use |
|---|
| string | TemplateRef | Custom item rendering |
| string | TemplateRef | Custom group header display |
| string | TemplateRef | Add info below list |
| boolean | 10,000+ items (performance) |
| string | Organize items by category |
| string | StartsWith | Contains | EndsWith |
| number | Remote data request delay |
Component Lifecycle
1. CREATE: Component initialized
↓
2. DATA BIND: dataSource loaded & displayed
↓
3. USER INTERACTION: typing, clicking, keyboard
↓
4. FILTER/SEARCH: items filtered based on input
↓
5. SELECT: user chooses item or enters custom value
↓
6. VALUE UPDATE: ngModel updates, events fire
↓
7. DESTROY: component cleaned up
Key events to handle:
- : When selected value changes
- : When user types (filter queries)
- : When item is selected
- : When component gets focus
- : When component loses focus
Workflow Decision Tree
Need to implement ComboBox? Follow this decision tree:
1. Do you have data to display?
├─ YES: Go to "Data Binding & Sources" reference
└─ NO: Define your data array first
2. Do users need to search/filter?
├─ YES: Go to "Filtering & Search" reference
└─ NO: allowFiltering = false (default)
3. Do you need to group items?
├─ YES: Go to "Grouping & Templates" reference
└─ NO: Skip grouping configuration
4. Are you using a form?
├─ YES: Go to "Form Support & Validation" reference
└─ NO: Use standalone ComboBox
5. Is accessibility required?
├─ YES: Go to "Accessibility & Localization" reference
└─ NO: Still recommended for compliance
6. Performance issues with large datasets?
├─ YES: Enable virtual scrolling + pagination
└─ NO: Standard rendering is fine
Next Steps
- Start here: Getting Started - Set up your first ComboBox
- Bind data: Data Binding & Sources - Connect to your data
- Add search: Filtering & Search - Enable user filtering
- Customize: Grouping & Templates - Style and organize display
- Advanced: Advanced Patterns & How-To - Autofill, cascading, icons, resizing
- Features: Feature Configuration - Enable advanced features
- Integrate: Form Support - Connect to forms
- Polish: Accessibility - Ensure compliance
- Reference: API Reference - Full properties, methods, and events reference
Additional Resources
DropDownList
A single-value selection component from a predefined list. Supports local and remote data sources, filtering, grouping, custom templates, virtualization for large datasets, and full Angular forms integration.
Documentation Navigation Guide
Getting Started
📄 Read: references/dropdownlist-getting-started.md
- Installation and Angular CLI setup
- Installing
@syncfusion/ej2-angular-dropdowns
- CSS/theme imports for Material3
- Adding to the template
- Basic data binding with
- Popup height/width configuration
- Two-way binding with
Data Binding
📄 Read: references/dropdownlist-data-binding.md
- Binding primitive arrays (strings, numbers)
- Binding arrays of objects with mapping
- Binding to nested/complex objects
- Remote data via (OData, Web API)
- Async pipe with Observable data streams
- Value binding (primitive and object types with )
Filtering
📄 Read: references/dropdownlist-filtering.md
- Enabling search with
- Using the event and method
- Minimum character threshold before filtering starts
- Filter types: , ,
- Case-sensitive filtering
- Diacritics/accent-insensitive filtering
- Debounce delay for performance optimization
Templates
📄 Read: references/dropdownlist-templates.md
- Item template: customize each list item
- Value template: customize the selected value display
- Group template: customize group header appearance
- Header template: static element at popup top
- Footer template: static element at popup bottom
- No-records template: empty state display
- Action failure template: error state display
Grouping & Virtualization
📄 Read: references/dropdownlist-grouping-and-virtualization.md
- Grouping items with field
- Inline and fixed floating group headers
- Virtual scrolling with for large lists
- Virtual scrolling with remote data
- Combining filtering and virtualization
- Customizing item count in virtual mode
Disabled Items & Forms
📄 Read: references/dropdownlist-disabled-items-and-forms.md
- Disabling specific items via
- Dynamic method (by value, index, or element)
- Disabling the entire component with
- Template-driven forms with
- Reactive forms with and
Customization & Styling
📄 Read: references/dropdownlist-customization-and-styling.md
- CSS overrides for wrapper, icon, focus states
- Outline theme focus customization
- Popup appearance and list item styles
- Float label and placeholder styling
- Mandatory asterisk pattern
- Localization with class
- RTL (right-to-left) support
How-To Recipes
📄 Read: references/dropdownlist-how-to.md
- Add / remove / clear items dynamically
- Close popup programmatically
- Cascading DropDownLists
- Customize group header template
- Highlight filtered characters
- Incremental search behavior
- Modify remote data results
- Remote data item count display
- Tooltip on list items
- Value change event handling
- Icon support in list items
API Reference
📄 Read: references/dropdownlist-api.md
- Complete properties reference with types, defaults, and usage examples
- All methods with signatures, parameters, and return types
- All events with argument interfaces and usage examples
- Interface details: , , , ,
- Quick-reference summary tables for properties, methods, and events
Quick Start Example
typescript
import { Component, OnInit } from '@angular/core';
import { DropDownListModule } from '@syncfusion/ej2-angular-dropdowns';
@Component({
standalone: true,
imports: [DropDownListModule],
selector: 'app-root',
template: `
<ejs-dropdownlist
id="ddl"
[dataSource]="sports"
[fields]="fields"
placeholder="Select a sport"
[(value)]="selectedValue"
(change)="onChange($event)">
</ejs-dropdownlist>
<p>Selected: {{ selectedValue }}</p>
`
})
export class AppComponent implements OnInit {
public sports: { id: number; name: string }[] = [];
public fields = { text: 'name', value: 'id' };
public selectedValue: number = 2;
ngOnInit() {
this.sports = [
{ id: 1, name: 'Badminton' },
{ id: 2, name: 'Cricket' },
{ id: 3, name: 'Football' },
{ id: 4, name: 'Tennis' }
];
}
onChange(args: any) {
this.selectedValue = args.value;
}
}
Common Patterns
Searchable Dropdown
typescript
// Enable filtering in template
// <ejs-dropdownlist [allowFiltering]="true" (filtering)="onFilter($event)">
import { FilteringEventArgs } from '@syncfusion/ej2-angular-dropdowns';
import { Query } from '@syncfusion/ej2-data';
onFilter(args: FilteringEventArgs) {
let query = new Query();
query = args.text !== ''
? query.where('name', 'contains', args.text, true)
: query;
args.updateData(this.sports, query);
}
Remote Data Dropdown
🔒
Security policy — remote data is a restricted pattern.
Binding DropDownList to a remote endpoint requires a security review (see
Security & Trust Boundary) before use in production.
Remote data binding details and requirements are documented in
references/dropdownlist-data-binding.md.
No remote example is provided here by default.
Reactive Form Integration
typescript
import { FormBuilder, FormGroup, Validators, ReactiveFormsModule } from '@angular/forms';
import { DropDownListModule } from '@syncfusion/ej2-angular-dropdowns';
// In component:
form = this.fb.group({ sport: ['Cricket', Validators.required] });
// In template:
// <form [formGroup]="form">
// <ejs-dropdownlist formControlName="sport" [dataSource]="sports"></ejs-dropdownlist>
// </form>
Key Props
| Property | Type | Description |
|---|
| | Data for the list |
| | Maps text, value, groupBy, disabled, iconCss |
| string | number | boolean | object
| Selected value (supports two-way binding) |
| | Input placeholder text |
| | Enable search box in popup |
| 'contains' | 'startsWith' | 'endsWith'
| Filter match strategy |
| | Virtual scrolling for large lists |
| / | | Popup dimensions |
| | Enable/disable entire component |
| | Bind full object as value |
| | Case-insensitive filtering (default: true) |
| | Diacritics-insensitive filtering |
| | Delay (ms) before filter triggers |
| | Template for list items |
| | Template for selected value display |
| | Empty state message |
Common Use Cases
Form field with validation → See references/dropdownlist-disabled-items-and-forms.md
Large list (1000+ items) → Enable
[enableVirtualization]="true"
— see
references/dropdownlist-grouping-and-virtualization.md
Country/State/City cascading → See references/dropdownlist-how-to.md
Custom item rendering (icons, multi-column) → See references/dropdownlist-templates.md
Remote API data → See references/dropdownlist-data-binding.md
ListBox
A list-based selection component enabling single or multi-item selection. Supports data binding, templates, drag-and-drop reordering and transfer, sorting, grouping, and comprehensive accessibility features.
Component Overview
The Syncfusion ListBox is a high-performance dropdown list replacement with advanced features:
| Feature | Benefit |
|---|
| Multiple Selection Modes | Single, multiple, or checkbox selection |
| Data Binding | Local arrays, complex objects, or remote services |
| Drag & Drop | Reorder items or transfer between lists |
| Customization | Icons, templates, grouping, sorting |
| Accessibility | WCAG 2.2, screen readers, keyboard navigation |
| Performance | Efficient rendering with large datasets |
Documentation Navigation Guide
Getting Started
📄 Read: references/listbox-getting-started.md
- Installation and package setup
- Angular standalone vs NgModule patterns
- Basic component initialization
- CSS imports and theme selection
- Binding local data sources
- Running and testing the application
Selection Modes and Interactions
📄 Read: references/listbox-selection-modes.md
- Single item selection
- Multiple item selection with SHIFT/CTRL
- Checkbox selection mode
- Select all functionality
- Handling change events
- Getting selected items programmatically
Data Binding and Field Mapping
📄 Read: references/listbox-data-binding.md
- Binding array of strings
- Binding array of objects
- Binding complex nested objects
- Remote data with DataManager and Query
- Field mapping (text, value, groupBy, iconCss)
- Troubleshooting data binding issues
Drag-and-Drop Features
📄 Read: references/listbox-drag-and-drop-features.md
- Single ListBox drag-and-drop reordering
- Dual ListBox drag-and-drop transfer
- Drag and drop events (dragStart, drag, drop)
- Scope configuration for multiple lists
- Event handling and item manipulation
- Real-world dual ListBox patterns
Customization and Styling
📄 Read: references/listbox-customization.md
- Icons and iconCss field mapping
- Custom item templates
- Grouping items by category
- Sorting items (ascending/descending)
- CSS styling and theming
- Theme Studio integration
- Responsive design
Practical Implementation Examples
📄 Read: references/listbox-practical-examples.md
- Filtering ListBox items
- Form submission with selected items
- Enable/disable items conditionally
- Scroller for large datasets
- Real-world use cases
- Common troubleshooting scenarios
How-To Guides and Common Tasks
📄 Read: references/listbox-how-to-guides.md
- Add items programmatically
- Select items programmatically
- Enable or disable items dynamically
- Enable scroller for large datasets
- Filter ListBox data with input
- Submit selected items in forms
API Reference
📄 Read: references/listbox-api.md
- All component properties with types, defaults, and examples
- All public methods with parameter signatures and usage examples
- All events with event argument interfaces and handler patterns
- Interface definitions: , ,
- Event arg interfaces: , , ,
BeforeItemRenderEventArgs
, ,
- Enum definitions: , , , ,
Quick Start Example
Basic ListBox with Local Data
typescript
import { Component, OnInit } from '@angular/core';
import { ListBoxModule } from '@syncfusion/ej2-angular-dropdowns';
@Component({
imports: [ListBoxModule],
standalone: true,
selector: 'app-listbox',
template: `
<ejs-listbox
[dataSource]="items"
[selectionSettings]="{ mode: 'Multiple' }">
</ejs-listbox>
`
})
export class ListBoxComponent implements OnInit {
public items: { [key: string]: Object }[] = [];
ngOnInit(): void {
this.items = [
{ text: 'Option 1', id: '1' },
{ text: 'Option 2', id: '2' },
{ text: 'Option 3', id: '3' }
];
}
}
With Styles
⚠️
Security note: These imports are resolved from
at build time.
Ensure the installed Syncfusion packages match your pinned versions in
or
before building. Do not source these files from a CDN without
Subresource Integrity (SRI) hashes.
css
/* In your global styles.css */
@import '@syncfusion/ej2-base/styles/material3.css';
@import '@syncfusion/ej2-dropdowns/styles/material3.css';
@import '@syncfusion/ej2-inputs/styles/material3.css';
@import '@syncfusion/ej2-lists/styles/material3.css';
Common Patterns
Selection with Change Event
typescript
import { ListBoxChangeEventArgs } from '@syncfusion/ej2-dropdowns';
selectedValues: string[] = [];
onSelectionChange(args: ListBoxChangeEventArgs): void {
this.selectedValues = args.value as string[];
}
Template:
html
<ejs-listbox
[dataSource]="items"
(change)="onSelectionChange($event)">
</ejs-listbox>
Dual ListBox for Transfer
typescript
sourceItems = [
{ text: 'Available Item 1', id: '1' },
{ text: 'Available Item 2', id: '2' }
];
selectedItems = [];
Template:
html
<div style="display: flex; gap: 20px;">
<div>
<h4>Available Items</h4>
<ejs-listbox
[dataSource]="sourceItems"
allowDragAndDrop="true"
scope="transfer-list">
</ejs-listbox>
</div>
<div>
<h4>Selected Items</h4>
<ejs-listbox
[dataSource]="selectedItems"
allowDragAndDrop="true"
scope="transfer-list">
</ejs-listbox>
</div>
</div>
Filtered ListBox
typescript
allItems = [
{ text: 'Apple', category: 'Fruit' },
{ text: 'Carrot', category: 'Vegetable' },
{ text: 'Banana', category: 'Fruit' }
];
get filteredItems() {
return this.allItems.filter(item =>
item.text.toLowerCase().includes(this.searchTerm.toLowerCase())
);
}
Key Props
Selection Configuration
- :
{ mode: 'Single' | 'Multiple', showCheckbox: boolean, showSelectAll: boolean, checkboxPosition: 'Left' | 'Right' }
> Note: When using , you must inject :
typescript
import { ListBoxComponent, CheckBoxSelection, ListBoxModule } from '@syncfusion/ej2-angular-dropdowns';
ListBoxComponent.Inject(CheckBoxSelection);
@Component({ imports: [ListBoxModule] })
```- **`maximumSelectionLength`**: Limit how many items can be selected
- : Get or set selected values (
string[] | number[] | boolean[]
)
Data and Display
- : Array or DataManager with items
- :
{ text, value, groupBy, iconCss, disabled, htmlAttributes }
- : Template for rendering each list item
- : Template shown when no items match
Interactions
- : Enable drag-and-drop reordering/transfer
- : Identify related ListBoxes for drag-drop transfer
- : Show built-in filter search bar
- : Placeholder text for the filter bar
- :
'StartsWith' | 'EndsWith' | 'Contains'
- : Configure toolbar buttons for dual-ListBox transfer
Appearance
- : Height of the ListBox
- :
'None' | 'Ascending' | 'Descending'
- : Enable/disable component
- : Right-to-left rendering
- : Additional CSS class
Next Steps
- Get Started: Read references/listbox-getting-started.md for setup instructions
- Choose Selection Mode: Review references/listbox-selection-modes.md for your use case
- Bind Data: See references/listbox-data-binding.md for data source options
- Add Interactions: Explore references/listbox-drag-and-drop-features.md for advanced features
- Customize: Check references/listbox-customization.md for styling options
- See Examples: Review references/listbox-practical-examples.md for real-world implementations
- API Reference: Consult references/listbox-api.md for the complete properties, methods, events, and interface definitions
Common Use Cases
- Selection Forms: Multi-select dropdown replacement
- Transfer Lists: Move items between lists (dual ListBox)
- Categories: Group-based item organization
- Filtering: Filter large datasets
- Data Display: Show structured list data
- Accessibility: Compliant selection interfaces
Mention
An autocomplete suggestion popup triggered by a typed character (default
) inside a target element. Supports user tagging, custom trigger characters, rich text integration, remote data, templates, and full accessibility.
Component Overview & Architecture
The
Mention component renders an autocomplete suggestion popup when the user types a trigger character (default
) inside a target element (a
,
, or similar). It is designed for:
- User tagging — tag people, teams, or resources using
- Hashtag suggestions — use any custom character (, , etc.) as the trigger
- Rich text integration — works with divs and editors
- Data binding — supports local arrays (strings, objects, complex objects) and remote DataManager sources
- Filtering — , , with configurable min-length, debounce, and spacing
- Template customization — item, display, no-records, spinner, and group templates
- Disabled items — mark individual list items as non-selectable
- Accessibility — WCAG 2.2 compliant with full keyboard navigation and ARIA attributes
Key Characteristics
| Aspect | Details |
|---|
| Trigger | Any single character via (default ) |
| Target | Any or CSS selector string set via |
| Data Sources | Local arrays (strings, objects), remote (OData, Web API) |
| Filtering | Built-in: , , ; configurable , |
| Display | controls whether the trigger character is shown with selected text |
| Suffix | appends a space or newline after the selected item |
| Accessibility | WCAG 2.2, Section 508, ADA; keyboard shortcuts: Arrow keys, Enter, Tab, Escape |
| Localization | for locale key |
Documentation Navigation Guide
📄 Getting Started
Read: references/mention-getting-started.md
- Install
@syncfusion/ej2-angular-dropdowns
package
- Set up Angular 21+ project with standalone components
- Import and required CSS themes
- Create a target div
- Bind and basic
- Display/customize the mention character with and
📄 Data Binding
Read: references/mention-data-binding.md
- Bind to local arrays of strings, JSON objects, and complex objects
- Map , , , and via property
- Remote data binding (restricted — requires security review; see Security & Trust Boundary)
- Use the property to scope remote requests
📄 Filtering
Read: references/mention-filtering.md
- Control filter strategy with (, , )
- Set minimum input length before triggering with
- Allow spaces in the middle of a mention search with
- Limit visible suggestion count with
- Tune debounce delay for remote sources with
📄 Templates
Read: references/mention-templates.md
- Customize suggestion list item layout with
- Customize the inserted text representation with
- Handle empty results with
- Show a loading indicator while fetching remote data with
- Customize grouped items with
📄 Customization
Read: references/mention-customization.md
- Show/hide the trigger character alongside selected text with
- Append a suffix (space, newline) after selection with
- Resize the popup with and
- Change the trigger character with
- Control leading space requirement with
- Apply custom CSS classes with
- Highlight searched characters with
- Configure and for search behavior
📄 Sorting & Disabled Items
Read: references/mention-sorting-and-disabled-items.md
- Sort suggestions with (, , )
- Mark items as non-selectable via
- Dynamically disable items at runtime using the method
📄 Accessibility & Localization
Read: references/mention-accessibility-and-localization.md
- WCAG 2.2, Section 508, and ADA compliance
- Full keyboard shortcuts (Arrow Down/Up, Enter, Tab, Escape)
- ARIA attributes: , ,
- Localize with
- RTL support with
📄 API Reference
Read: references/mention-api.md
- Complete properties reference with types, defaults, and descriptions
- All methods: , , , , , , ,
- All events: ,
Quick Start Example
typescript
// app.component.ts (Angular 21 Standalone)
import { Component } from '@angular/core';
import { MentionModule } from '@syncfusion/ej2-angular-dropdowns';
@Component({
selector: 'app-root',
standalone: true,
imports: [MentionModule],
template: `
<label style="font-size: 15px; font-weight: 600;">Comments</label>
<div id="mentionElement"
placeholder="Type @ and tag a user"
style="min-height: 100px; border: 1px solid #D7D7D7; border-radius: 4px; padding: 8px;">
</div>
<ejs-mention [dataSource]="userData" [target]="mentionTarget"></ejs-mention>
`
})
export class AppComponent {
public userData: string[] = ['Selma Rose', 'Garth', 'Robert', 'William', 'Joseph'];
public mentionTarget: string = '#mentionElement';
}
Install the package:
⚠️
Security note: Pin the package to a specific version to prevent unintended upgrades
to potentially compromised releases. Verify the installed version against your lockfile
(
/
) after installation.
bash
ng add @syncfusion/ej2-angular-dropdowns@<version>
⚠️
Security note: These imports are resolved from
at build time.
Ensure the installed Syncfusion packages match your pinned versions in
or
before building. Do not source these files from a CDN without
Subresource Integrity (SRI) hashes.
css
@import '../node_modules/@syncfusion/ej2-base/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-buttons/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-popups/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-lists/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-angular-dropdowns/styles/material3.css';
Common Patterns
Pattern 1: Object Data with Field Mapping
typescript
public userData: { [key: string]: Object }[] = [
{ Name: 'Selma Rose', EmailId: 'selma@gmail.com' },
{ Name: 'Maria', EmailId: 'maria@gmail.com' },
{ Name: 'Robert', EmailId: 'robert@gmail.com' }
];
public fields: Object = { text: 'Name' };
public mentionTarget: string = '#mentionElement';
html
<ejs-mention [dataSource]="userData" [fields]="fields" [target]="mentionTarget"></ejs-mention>
Pattern 2: Custom Trigger Character with showMentionChar
html
<ejs-mention
[dataSource]="userData"
[target]="mentionTarget"
[mentionChar]="'#'"
[showMentionChar]="true">
</ejs-mention>
Pattern 3: Remote Data with Popup Width
🔒
Security policy — remote data is a restricted pattern.
Binding Mention to a remote endpoint requires a security review (see
Security & Trust Boundary) before use in production.
Remote data binding details and requirements are documented in
references/mention-data-binding.md.
No remote example is provided here by default.
Pattern 4: Allow Spaces in Mention Search
html
<ejs-mention
[dataSource]="userData"
[fields]="fields"
[allowSpaces]="true"
[target]="mentionTarget">
</ejs-mention>
Key Properties Quick Reference
| Property | Type | Default | Purpose |
|---|
| HTMLElement | string | — | Target element where mention suggestions appear |
| Array | DataManager | | Source data for suggestions |
| FieldSettingsModel | { text: null, value: null }
| Map data columns to component |
| string | | Character that triggers the suggestion popup |
| boolean | | Show trigger character with inserted text |
| string | | Text appended after the selected item |
| FilterType | | How suggestions are matched |
| number | | Minimum chars to trigger filtering |
| boolean | | Allow spaces in mid-mention search |
| number | | Max number of suggestions shown |
| number | | Delay (ms) before filtering fires |
| SortOrder | | Sort suggestions order |
| string | number | | Popup list height |
| string | number | | Popup list width |
| boolean | | Highlight matched characters |
| boolean | | Case-insensitive search |
| boolean | — | Ignore diacritics in search |
| boolean | | Require space before trigger character |
| string | | Custom CSS class(es) on the component |
| string | | Localization culture |
| boolean | | Right-to-left rendering |
| boolean | | Persist state between reloads |
| number | | Popup z-index |
Workflow Decision Tree
Need to implement Mention / @mention tagging?
│
├─ What's your data source?
│ ├─ Local strings/array → See Data Binding: "Array of simple data"
│ ├─ Local objects → See Data Binding: "Array of JSON data" + fields mapping
│ └─ Remote API → See Data Binding: "Binding remote data"
│
├─ Custom trigger character (not @)?
│ └─ YES → [mentionChar]="'#'" (or any single char)
│
├─ Show trigger char in inserted text?
│ └─ YES → [showMentionChar]="true"
│
├─ Multi-word names (e.g., "John Doe")?
│ └─ YES → [allowSpaces]="true"
│
├─ Custom item layout in popup?
│ └─ YES → See Templates: itemTemplate / displayTemplate
│
├─ Need sorted suggestions?
│ └─ YES → See Sorting & Disabled Items: sortOrder
│
├─ Some items should not be selectable?
│ └─ YES → See Sorting & Disabled Items: fields.disabled / disableItem
│
├─ Filtering behavior?
│ ├─ By default (Contains) → No extra config
│ ├─ StartsWith / EndsWith → filterType="StartsWith"
│ └─ Minimum typed chars → [minLength]="3"
│
└─ Need accessibility or localization?
└─ YES → See Accessibility & Localization reference
MultiSelect
A multi-value selection dropdown (
) supporting four visual modes (Default/Box/Delimiter/CheckBox), rich filtering, templates, grouping, remote data, virtualization, and full Angular form integration.
Component Overview
| Mode | Behavior | Use When |
|---|
| Selected items shown as chips in input | Standard multi-select |
| Same as Default, explicit box display | Visual clarity needed |
| Selected items as comma-separated text | Space-constrained layouts |
| Popup shows checkboxes per item | Bulk selection workflows |
Documentation Navigation Guide
Getting Started
📄 Read: references/multiselect-getting-started.md
- Installation and package setup ()
- CSS imports and theme configuration
- Basic in standalone Angular component
- Popup height/width configuration
- Angular version notes (standalone default in Angular 19+)
Data Binding & Value Binding
📄 Read: references/multiselect-data-binding.md
- Local arrays (strings, numbers, objects)
- mapping: , , , ,
- Remote data with DataManager (OData, Web API)
- Pre-selecting values programmatically
- Object binding with
Selection Modes, Chips & Item Control
📄 Read: references/multiselect-selection-modes.md
- property: Default / Box / Delimiter / CheckBox
- CheckBox mode: , ,
- Chip customization via event
- Custom values with
- Disabling specific items: ,
- and behaviors
Filtering
📄 Read: references/multiselect-filtering.md
- Enabling + event +
- : , ,
- Minimum character threshold before query fires
- Remote filtering with DataManager
- Case-insensitive matching
Templates
📄 Read: references/multiselect-templates.md
- — custom list item rendering with
- — customize chip/selected value display
- — custom group header content
- / — popup top/bottom
- /
Grouping & Cascading
📄 Read: references/multiselect-grouping-and-items.md
- — organize items into categories
- Fixed vs inline group headers
- for group-level Select All
- Cascading MultiSelect: parent event → filter child data
- Country → State → City cascade pattern
Form Integration
📄 Read: references/multiselect-form-support.md
- Template-driven forms: , , two-way binding
- Reactive forms: , ,
- usage and validation
- Required field and custom validator patterns
Advanced Features
📄 Read: references/multiselect-advanced-features.md
- Virtualization for large datasets ()
- Popup resize (, resize events)
- Icons in list items ( field)
- Localization (, locale key overrides)
- Accessibility: WAI-ARIA, keyboard navigation, WCAG 2.2
- RTL support
API Reference
📄 Read: references/multiselect-api.md
- Complete list of all properties with types and defaults
- All public methods with signatures, parameters, and return types
- All events with argument types and usage examples
- Module injection notes ()
Quick Start
⚠️
Security note: Pin the package to a specific version to prevent unintended upgrades
to potentially compromised releases. Verify the installed version against your lockfile
(
/
) after installation.
bash
ng add @syncfusion/ej2-angular-dropdowns@<version>
typescript
// app.component.ts — Standalone Angular 19+
import { Component } from '@angular/core';
import { MultiSelectModule } from '@syncfusion/ej2-angular-dropdowns';
@Component({
standalone: true,
imports: [MultiSelectModule],
selector: 'app-root',
template: `
<ejs-multiselect
[dataSource]="skills"
[fields]="fields"
placeholder="Select skills"
[(value)]="selectedSkills"
(change)="onChange($event)">
</ejs-multiselect>
`
})
export class AppComponent {
public skills = [
{ id: 1, name: 'Angular' },
{ id: 2, name: 'React' },
{ id: 3, name: 'TypeScript' },
{ id: 4, name: 'Node.js' },
];
public fields = { text: 'name', value: 'id' };
public selectedSkills: number[] = [1, 3]; // pre-select Angular & TypeScript
onChange(args: any): void {
this.selectedSkills = args.value;
}
}
⚠️
Security note: These imports are resolved from
at build time.
Ensure the installed Syncfusion packages match your pinned versions in
or
before building. Do not source these files from a CDN without
Subresource Integrity (SRI) hashes.
css
/* styles.css */
@import '@syncfusion/ej2-base/styles/material3.css';
@import '@syncfusion/ej2-buttons/styles/material3.css';
@import '@syncfusion/ej2-inputs/styles/material3.css';
@import '@syncfusion/ej2-lists/styles/material3.css';
@import '@syncfusion/ej2-popups/styles/material3.css';
@import '@syncfusion/ej2-dropdowns/styles/material3.css';
@import '@syncfusion/ej2-angular-dropdowns/styles/material3.css';
Common Patterns
Checkbox Mode with Select All
typescript
import { MultiSelectModule, CheckBoxSelectionService } from '@syncfusion/ej2-angular-dropdowns';
@Component({
standalone: true,
imports: [MultiSelectModule],
providers: [CheckBoxSelectionService],
template: `
<ejs-multiselect
[dataSource]="items"
mode="CheckBox"
[showSelectAll]="true"
selectAllText="Select All"
unSelectAllText="Unselect All"
[maximumSelectionLength]="5">
</ejs-multiselect>
`
})
Filtering with Remote Data
🔒
Security policy — remote data is a restricted pattern.
Binding MultiSelect to a remote endpoint requires a security review (see
Security & Trust Boundary) before use in production.
Remote filtering details and requirements are documented in
references/multiselect-filtering.md.
No remote example is provided here by default.
Reactive Form Integration
typescript
import { ReactiveFormsModule, FormControl } from '@angular/forms';
// In component:
public skillsControl = new FormControl([1, 3]); // pre-selected IDs
// In template:
// <ejs-multiselect [formControl]="skillsControl" [dataSource]="skills" [fields]="fields">
// </ejs-multiselect>
Key Props
| Property | Type | Purpose |
|---|
| | Items to display |
| | Maps , , , , |
| | Currently selected values (use for two-way) |
| | , , , |
| | Enables search within the dropdown |
| | , , |
| | Shows Select All in CheckBox mode |
| | Caps the number of selectable items |
| | Lets users add values not in the list |
| | Optimizes rendering for large lists |
| / | | Constrains popup dimensions |
| | Lets users drag-resize the popup |
| | Input hint text |
MultiColumn ComboBox
The MultiColumn ComboBox (
) is a dropdown component that displays data in a multi-column grid-like popup. It supports column configuration, data binding (local/remote), filtering, sorting, grouping, templates, virtualization, events, and accessibility.
Navigation Guide
Getting Started
📄 Read: references/getting-started.md
- Installation and package setup (
ng add @syncfusion/ej2-angular-multicolumn-combobox@<version>
)
⚠️
Security note: Pin the package to a specific version to prevent unintended upgrades
to potentially compromised releases. Verify the installed version against your lockfile
(
/
) after installation.
- CSS/theme imports for Material and other themes
- Basic standalone component usage with
<ejs-multicolumncombobox>
- Binding and properties
- Configuring and child elements
- Popup height and width configuration (, )
Columns Configuration
📄 Read: references/columns.md
- Defining columns with , ,
- Setting text alignment with
- Using column with
- Displaying boolean values as checkboxes with
- Applying custom CSS attributes via
- Custom column headers with
- Formatting values with
Data Binding
📄 Read: references/data-binding.md
- Binding local object arrays via
- Remote data binding (restricted — requires security review; see Security & Trust Boundary)
- Mapping : , , and
- Using the property to filter/limit remote results
Items and Display Configuration
📄 Read: references/items.md
- Setting pre-selected text with property
- Setting pre-selected value with property
- Setting selected item by index with property
- Placeholder text with
- Float label behavior with (Never/Always/Auto)
- Adding HTML attributes via
- Setting component width with
- Configuring popup dimensions (, )
- Show/hide clear button with
- Applying custom CSS class with
- Disabled state with
- Read-only mode with
- Configuring grid settings (: , , )
Filtering
📄 Read: references/filtering.md
- Enable/disable filtering with
- Changing filter type with (StartsWith/EndsWith/Contains)
Sorting
📄 Read: references/sorting.md
- Enable/disable sorting with
- Setting initial sort order with (None/Ascending/Descending)
- Sorting single vs. multiple columns with
Grouping
📄 Read: references/grouping.md
- Grouping items using the field in property
Templates
📄 Read: references/templates.md
- Customizing row items with
- Custom column headers with
- Group headers with
- Footer content with
- No-records placeholder with
- Remote failure display with
Events
📄 Read: references/events.md
- , , — data lifecycle events
- — item selection event
- — value change event
- — text input filtering event
- / — popup state events
- — component rendered event
Virtualization
📄 Read: references/virtualization.md
- Enabling virtual scrolling with
- Virtual scrolling with local and remote large datasets
Accessibility and Localization
📄 Read: references/accessibility.md
- WCAG 2.2, Section 508 compliance
- WAI-ARIA attributes used by the component
- Keyboard navigation shortcuts
- RTL support with
- Localization of text using
API Reference
📄 Read: references/api.md
- Complete list of properties, methods, and events
- interface properties
- interface
- Methods: , , , , , ,
Quick Start
typescript
import { Component } from '@angular/core';
import { MultiColumnComboBoxModule } from '@syncfusion/ej2-angular-multicolumn-combobox';
@Component({
imports: [MultiColumnComboBoxModule],
standalone: true,
selector: 'app-root',
template: `
<ejs-multicolumncombobox
id='multicolumn'
[dataSource]='empData'
[fields]='fields'
[placeholder]='waterMark'>
<e-columns>
<e-column field='EmpID' header='Employee ID' width='100'></e-column>
<e-column field='Name' header='Name' width='90'></e-column>
<e-column field='Designation' header='Designation' width='100'></e-column>
<e-column field='Country' header='Country' width='90'></e-column>
</e-columns>
</ejs-multicolumncombobox>`
})
export class AppComponent {
public empData: Object[] = [
{ EmpID: 1001, Name: 'Andrew Fuller', Designation: 'Team Lead', Country: 'England' },
{ EmpID: 1002, Name: 'Robert', Designation: 'Developer', Country: 'USA' },
{ EmpID: 1003, Name: 'Michael', Designation: 'HR', Country: 'Russia' }
];
public fields: Object = { text: 'Name', value: 'EmpID' };
public waterMark: string = 'Select an employee';
}
Common Patterns
Remote data with DataManager
When data comes from an API, use
→ Read
references/data-binding.md
Large datasets (150+ rows)
Enable
to avoid performance issues → Read
references/virtualization.md
Rich row display
Use column
with
for images, badges, or custom HTML → Read
Grouped dropdown
Set
in
to categorize items → Read
Programmatic open/close