Angular Grid - Setup
Smart UI for Angular supports both standalone components (bootstrapApplication) and NgModule-based apps (bootstrapModule(AppModule)). Steps 1-5 show the standalone path; the section below shows the NgModule path with the same package and styles.
Demo source (Smart UI repo): angular/src/grid/overview
1 NPM Install
Install the smart-webcomponents-angular package:
npm install smart-webcomponents-angular
2 Register styles
Add the default Smart UI stylesheet to angular.json -> projects -> <your-project> -> architect -> build -> options -> styles (merge with existing entries):
"styles": [ "node_modules/smart-webcomponents-angular/source/styles/smart.default.css" ]
Add optional theme CSS from the same package after smart.default.css if you use Bootstrap, Fluent, or other bundled themes.
3 Import the Angular module
Import GridModule from smart-webcomponents-angular/grid: use @Component.imports for standalone, or add it to your AppModule (or feature module) imports array for NgModule apps.
import { GridModule } from 'smart-webcomponents-angular/grid';
4 Root component (standalone)
Add GridModule to your root standalone component (src/app/app.ts). Snippet from Smart UI demos (paths normalized to app.html / App where applicable):
import { Component } from '@angular/core';
import { GridModule } from 'smart-webcomponents-angular/grid';
@Component({
selector: 'app-root',
standalone: true,
imports: [GridModule],
templateUrl: './app.html',
styleUrls: ['./app.css']
})
export class App {
dataSource = [
{ id: 1, firstName: 'Andrew', lastName: 'Fuller', productName: 'Black Tea', available: true, date: '2026-01-01', quantity: 10, price: 2.5, total: 25 },
{ id: 2, firstName: 'Nancy', lastName: 'Davolio', productName: 'Green Tea', available: false, date: '2026-01-01', quantity: 5, price: 3.0, total: 15 },
{ id: 3, firstName: 'John', lastName: 'Doe', productName: 'White Tea', available: true, date: '2026-01-01', quantity: 8, price: 2.0, total: 16 }
];
dataSourceSettings = {
dataFields: [
'id: number',
'firstName: string',
'lastName: string',
'productName: string',
'available: boolean',
'date: date',
'quantity: number',
'price: number',
'total: number'
]
};
columns = [
{ label: 'First Name', dataField: 'firstName', editor: { required: true, template: 'input' } },
{ label: 'Last Name', dataField: 'lastName', editor: { required: true, template: 'input' } },
{ label: 'Product', width: 200, dataField: 'productName', editor: { required: true, template: 'dropDownList' } },
{ label: 'Available', dataField: 'available', template: 'checkBox', editor: 'checkBox' },
{ label: 'Quantity', dataField: 'quantity', editor: 'numberInput' },
{ label: 'Unit Price', dataField: 'price', editor: 'numberInput', cellsFormat: 'c2' }
];
}
Boot the app with bootstrapApplication from src/main.ts and an ApplicationConfig in src/app/app.config.ts as generated by the CLI.
5 Template (standalone)
Use your markup in src/app/app.html (or inline template). Bind properties and events on smart-grid as needed:
<smart-grid [dataSource]="dataSource" [dataSourceSettings]="dataSourceSettings" [columns]="columns" [sortable]="true" [filterable]="true" [editable]="true" [columnResize]="true" [selectable]="true"> </smart-grid>
6 NgModule bootstrap (also supported)
Same npm package and angular.json styles as steps 1-2. Put GridModule on your NgModule.imports instead of @Component.imports, and bootstrap with bootstrapModule(AppModule).
NgModule is also supported: put GridModule from smart-webcomponents-angular/grid on NgModule.imports instead of @Component.imports.
Run
ng serve or npm start - then open http://localhost:4200/.
Smart UI for Angular - full documentation
Common Use Cases
-
Load data from REST API
Fetch JSON data and bind to the grid dynamically
const response = await fetch('/api/data'); const data = await response.json(); grid.dataSource = data; -
Enable inline cell editing
Allow users to edit cells directly in the grid
grid.editing = { enabled: true, mode: 'cell' }; -
Export to Excel
Export grid data to an Excel file
grid.exportData('xlsx', 'GridExport'); -
Apply column filtering
Enable filter row for column-based filtering
grid.filtering = { enabled: true, filterRow: { visible: true } };
Troubleshooting
- How do I bind grid events in Angular?
- Use Angular event binding syntax: (onChange)="onGridChange($event)" or add event listeners in ngAfterViewInit using @ViewChild to access the grid element.
- Why do I get 'smart-grid is not a known element' error?
- Import GridModule from 'smart-webcomponents-angular/grid' in your component's imports array (standalone) or AppModule imports.
Accessibility
The Grid component follows WAI-ARIA best practices:
- Keyboard navigation - Tab, Arrow keys, Enter, and Escape are supported
- ARIA roles - Appropriate roles and labels are applied automatically
- Focus management - Visible focus indicators for keyboard users
- Screen readers - State changes are announced to assistive technology
- High contrast - Supports Windows High Contrast Mode and forced colors
For custom labeling, set aria-label or aria-labelledby attributes on the component.
Supported stacks: Smart UI targets Angular 17+, React 18+, Vue 3+, Node 18 LTS, and evergreen browsers; pin exact package versions to your org policy.