Implementing Syncfusion Angular Notifications
Message
The Syncfusion Angular Message component (
) displays contextual messages with severity-based icons and colors to communicate importance to the user. It supports multiple
severity types,
visual variants,
close icon,
custom templates,
content alignment,
CSS customization, and full
accessibility compliance.
Package: @syncfusion/ej2-angular-notifications
Module:
Selector:
📋 All files linked under
are read-only documentation and comply with the same security policy as this skill.
Navigation Guide
Getting Started
📄 Read: references/message-getting-started.md
- Installing
@syncfusion/ej2-angular-notifications
via
- CSS/SCSS theme imports (Material3)
- import in standalone component
- Minimal template setup
- Running the application
Severity Types
📄 Read: references/message-severities.md
- property with all five values: Normal, Success, Info, Warning, Error
- Default severity (Normal)
- When to choose each severity type
- Code example with all severities
Visual Variants
📄 Read: references/message-variants.md
- property: Text, Outlined, Filled
- Default variant (Text)
- Combining variant with severity
- Full example showing all combinations
Icons and Close Icon
📄 Read: references/message-icons.md
- — hide/show the severity icon
- — add a close icon to dismiss messages
- event — react when user closes a message
- Restoring visibility with property
- Custom icon using
Customization and Templates
📄 Read: references/message-customization.md
- Content alignment: left (default), center (), right ()
- Rounded and square border styles via
- CSS-only message rendering (no script reference)
- Predefined CSS classes for manual DOM structure
- Rich HTML template via
Accessibility
📄 Read: references/message-accessibility.md
- WCAG 2.2 / Section 508 compliance
- WAI-ARIA attributes (, )
- Keyboard interaction (Tab, Enter/Space for close icon)
- RTL support via
- Screen reader behavior
API Reference
📄 Read: references/message-api.md
- All properties: , , , , , , , , ,
- Methods: ,
- Events: , ,
Quick Start
bash
ng add @syncfusion/ej2-angular-notifications
css
/* styles.css – added automatically by ng add */
/* NOTE: These are consumer-side stylesheet references only; no packages are installed or executed by this skill. */
@import '../node_modules/@syncfusion/ej2-base/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-angular-notifications/styles/message/material3.css';
typescript
import { MessageModule } from '@syncfusion/ej2-angular-notifications';
import { Component } from '@angular/core';
@Component({
imports: [MessageModule],
standalone: true,
selector: 'app-root',
template: '<ejs-message content="Please read the comments carefully"></ejs-message>'
})
export class AppComponent { }
Common Patterns
Message with Severity
typescript
import { MessageModule } from '@syncfusion/ej2-angular-notifications';
import { Component } from '@angular/core';
@Component({
imports: [MessageModule],
standalone: true,
selector: 'app-root',
template: `
<ejs-message content="Editing is restricted"></ejs-message>
<ejs-message content="Please read the comments carefully" severity="Info"></ejs-message>
<ejs-message content="Your message has been sent successfully" severity="Success"></ejs-message>
<ejs-message content="There was a problem with your network connection" severity="Warning"></ejs-message>
<ejs-message content="A problem occurred while submitting your data" severity="Error"></ejs-message>
`
})
export class AppComponent { }
Dismissable Message with Close Icon
typescript
import { MessageModule } from '@syncfusion/ej2-angular-notifications';
import { Component, ViewChild } from '@angular/core';
import { MessageComponent } from '@syncfusion/ej2-angular-notifications';
@Component({
imports: [MessageModule],
standalone: true,
selector: 'app-root',
template: `
<ejs-message #msg severity="Warning" [showCloseIcon]="true" (closed)="onClosed()">
There was a problem with your network connection
</ejs-message>
<button *ngIf="isClosed" (click)="reopen()">Show again</button>
`
})
export class AppComponent {
@ViewChild('msg') msg!: MessageComponent;
isClosed = false;
onClosed(): void {
this.isClosed = true;
}
reopen(): void {
this.msg.visible = true;
this.isClosed = false;
}
}
Filled Variant with Severity
typescript
import { MessageModule } from '@syncfusion/ej2-angular-notifications';
import { Component } from '@angular/core';
@Component({
imports: [MessageModule],
standalone: true,
selector: 'app-root',
template: `
<ejs-message content="Your message has been sent successfully"
severity="Success" variant="Filled">
</ejs-message>
`
})
export class AppComponent { }
Key Props at a Glance
| Property | Type | Default | Purpose |
|---|
| | | Text, HTML, or template content to display |
| | | Severity type: Normal, Success, Info, Warning, Error |
| | | Visual style: Text, Outlined, Filled |
| | | Show/hide the severity icon |
| | | Show/hide the close icon |
| | | Show or hide the entire message |
| | | Custom CSS class(es) appended to root element |
| | | Right-to-left rendering |
| | | Persist component state across page reloads |
| | | Override global culture/localization |
Skeleton
The Skeleton component provides a visual placeholder for content that is loading or yet to be rendered. It helps improve perceived performance by showing users what content is coming, reducing cognitive load during loading states.
Package: @syncfusion/ej2-angular-notifications
Module:
Selector:
When to Use This Skill
- Loading placeholders: Display skeleton layouts while fetching data from APIs
- Shimmer animations: Add Wave, Pulse, or Fade effects to loading states
- Multiple shapes: Build complex layouts using Circle, Square, Rectangle, and Text shapes
- Accessibility: Ensure loading states are accessible with ARIA attributes and screen reader support
- Custom styling: Apply custom CSS classes and themes to match your design system
- Conditional rendering: Show/hide skeletons based on data loading states
- RTL support: Implement right-to-left layouts with the Skeleton component
📋 All files linked under
are read-only documentation and comply with the same security policy as this skill.
Navigation Guide
Getting Started
📄 Read: references/skeleton-getting-started.md
- Installation and package setup
- Dependencies and CSS imports
- Basic skeleton implementation
- Angular 19+ standalone architecture
- Running your application with Skeleton
Shapes and Layout Design
📄 Read: references/skeleton-shapes.md
- Circle shapes for avatars and profile pictures
- Square shapes for thumbnails and icons
- Rectangle shapes for images and cards
- Text shapes for paragraphs and content
- Combining shapes to build complete layouts
- Responsive sizing and responsive design
Shimmer Effects and Animation
📄 Read: references/skeleton-shimmer-effects.md
- Wave effect (default animation)
- Pulse effect (fade in/out animation)
- Fade effect (opacity change animation)
- Changing effects dynamically
- Performance considerations for multiple skeletons
Styling and Customization
📄 Read: references/skeleton-styles-customization.md
- Using cssClass for custom styling
- Customizing wave/background colors
- Setting width and height dimensions
- Controlling visibility with the visible property
- CSS variables for theming
- Theme Studio integration
Accessibility Features
📄 Read: references/skeleton-accessibility.md
- WCAG 2.2 and Section 508 compliance
- Screen reader support and live regions
- WAI-ARIA attributes (role, aria-label, aria-live, aria-busy)
- Right-to-Left (RTL) support
- Keyboard navigation and focus management
- Color contrast requirements
- Accessibility validation tools
API Reference
📄 Read: references/skeleton-api.md
- All properties with descriptions and defaults
- Methods and lifecycle management
- Event handling patterns
- Type definitions (SkeletonType, ShimmerEffect)
- Property usage examples
- Complete API documentation
Quick Start
typescript
import { Component } from '@angular/core';
import { SkeletonModule } from '@syncfusion/ej2-angular-notifications';
@Component({
imports: [SkeletonModule],
standalone: true,
selector: 'app-root',
template: `
<div>
<h2>Loading User Profile...</h2>
<!-- Avatar skeleton -->
<ejs-skeleton shape="Circle" width="60px"></ejs-skeleton>
<!-- Name and description skeletons -->
<ejs-skeleton width="30%" height="15px"></ejs-skeleton>
<ejs-skeleton width="50%" height="15px"></ejs-skeleton>
<!-- Content skeleton -->
<ejs-skeleton shape="Rectangle" width="100%" height="150px"></ejs-skeleton>
</div>
`
})
export class AppComponent {}
Common Patterns
Pattern 1: Card Loading Skeleton
Display a skeleton layout matching a card component during data loading:
typescript
@Component({
selector: 'app-card-skeleton',
template: `
<div class='card-skeleton'>
<!-- Avatar -->
<div class='avatar-section'>
<ejs-skeleton shape="Circle" width="50px"></ejs-skeleton>
</div>
<!-- Content -->
<div class='content-section'>
<ejs-skeleton width="60%" height="12px"></ejs-skeleton>
<ejs-skeleton width="40%" height="12px"></ejs-skeleton>
<ejs-skeleton width="100%" height="80px"></ejs-skeleton>
</div>
<!-- Actions -->
<div class='action-section'>
<ejs-skeleton shape="Rectangle" width="30%" height="36px"></ejs-skeleton>
</div>
</div>
`
})
export class CardSkeletonComponent {}
Pattern 2: List Loading with Pulse Effect
Show multiple skeleton rows with a pulsing shimmer effect:
typescript
@Component({
selector: 'app-list-skeleton',
template: `
<div class='list-skeleton'>
<div class='list-item' *ngFor="let item of [1,2,3,4,5]">
<ejs-skeleton shape="Circle" width="40px" shimmerEffect="Pulse"></ejs-skeleton>
<div class='item-content'>
<ejs-skeleton width="50%" height="14px" shimmerEffect="Pulse"></ejs-skeleton>
<ejs-skeleton width="30%" height="12px" shimmerEffect="Pulse"></ejs-skeleton>
</div>
</div>
</div>
`
})
export class ListSkeletonComponent {}
Pattern 3: Conditional Skeleton Rendering
Show skeleton while loading, hide when content is ready:
typescript
@Component({
selector: 'app-conditional-skeleton',
template: `
<!-- Show skeleton while loading -->
<div *ngIf="isLoading">
<ejs-skeleton shape="Rectangle" width="100%" height="200px"
shimmerEffect="Wave"></ejs-skeleton>
</div>
<!-- Show content when loaded -->
<div *ngIf="!isLoading">
<img [src]="imageUrl" alt="Loaded content">
</div>
`
})
export class ConditionalSkeletonComponent {
isLoading = true;
imageUrl = '';
ngOnInit() {
// Simulate loading
setTimeout(() => {
this.isLoading = false;
this.imageUrl = 'assets/image.jpg';
}, 2000);
}
}
Key Properties
| Property | Type | Default | Purpose |
|---|
| SkeletonType | 'Text' | Defines skeleton shape: Text, Circle, Square, Rectangle |
| ShimmerEffect | 'Wave' | Animation effect: Wave, Pulse, Fade |
| string | number | '' | Skeleton width (required for Circle/Square) |
| string | number | '' | Skeleton height |
| boolean | true | Controls skeleton visibility |
| string | '' | Custom CSS class for styling |
| string | 'Loading…' | Aria-label for accessibility |
| boolean | false | Enable right-to-left layout |
| boolean | false | Persist state between page reloads |
Common Use Cases
- Data Grid Loading: Show skeleton rows while grid data is loading from server
- Image Gallery: Display placeholder rectangles while images download
- Feed/Timeline: Show multiple skeleton cards while loading feed items
- Profile Page: Combine shapes to preview profile layout
- List with Avatars: Use Circle + Text shapes for user lists
- Modal Content: Display skeleton inside dialogs during async operations
- Product Cards: Build skeleton matching product card layout
- Dashboard: Create skeleton layouts for dashboard widgets
Toast
The Syncfusion Angular Toast (
) is a non-blocking notification component that displays brief messages at a defined position on the screen. Toasts auto-dismiss after a configurable timeout and support rich content via templates, action buttons, icons, and progress bars.
Navigation Guide
Getting Started
📄 Read: references/getting-started.md
- Prerequisites and dependencies
- Installing
@syncfusion/ej2-angular-notifications
- Adding CSS/theme imports
- Basic toast setup (standalone + NgModule)
- Showing a toast on component creation
- Running the application
Configuration
📄 Read: references/configuration.md
- Title and content properties
- Custom target container
- Show/hide close button ()
- Progress bar (, )
- Newest on top ()
- Width and height customization
- Icon using property
- for semantic types (e-success, e-info, e-warning, e-danger)
- , ,
Position and Animation
📄 Read: references/position-and-animation.md
- Predefined X/Y positions (Left, Center, Right / Top, Bottom)
- Custom pixel/percentage positions
- Multiple toasts in different positions
- Animation configuration (/ effects, duration, easing)
- Default animation (FadeIn/FadeOut)
Templates and Action Buttons
📄 Read: references/template-and-buttons.md
- HTML string and element ID templates
- Angular with , ,
- Dynamic templates via method arguments
- Action buttons with property and click handlers
- configuration
Timeout and Events
📄 Read: references/timeout-and-events.md
- property (default 5000ms)
- on hover (default 1000ms)
- Static toast (timeOut: 0)
- All events: , , , , , , ,
- Event argument types and cancellation patterns
Toast Utility Service
📄 Read: references/toast-utility.md
- for minimal-code toasts
- Predefined types: Information, Success, Error, Warning
- Full argument usage with events and positioning
- When to use utility vs component approach
How-To Guides
📄 Read: references/how-to.md
- Close toast on click/tap
- Prevent duplicate toasts
- Restrict maximum visible toasts
- Add dynamic templates
- Render Angular in toast
- Show multiple toasts in various positions
- Customize progress bar theme and sizing
- Play audio before toast opens
- Prevent toast close with mobile swipe
- Show different types of toast
API Reference
📄 Read: references/api.md
- All properties with types and defaults
- Methods: , ,
- All events with argument type links
ToastAnimationSettingsModel
, ,
Quick Start
typescript
// app.ts (Angular standalone)
import { Component, ViewChild } from '@angular/core';
import { ToastModule } from '@syncfusion/ej2-angular-notifications';
@Component({
imports: [ToastModule],
standalone: true,
selector: 'app-root',
template: `
<ejs-toast #toast (created)="onCreated()">
<ng-template #title><div>Notification</div></ng-template>
<ng-template #content><div>Your action was successful.</div></ng-template>
</ejs-toast>
<button (click)="toast.show()">Show Toast</button>
`
})
export class App {
@ViewChild('toast') toast: any;
onCreated() { this.toast.show(); }
}
Install:
bash
ng add @syncfusion/ej2-angular-notifications
CSS (styles.css):
css
@import '@syncfusion/ej2-base/styles/material3.css';
@import '@syncfusion/ej2-buttons/styles/material3.css';
@import '@syncfusion/ej2-popups/styles/material3.css';
@import '@syncfusion/ej2-angular-notifications/styles/material3.css';
Common Patterns
Success/Error/Warning/Info Toast
typescript
// Using cssClass for semantic coloring
toastObj.show({ content: 'File saved!', cssClass: 'e-toast-success' });
toastObj.show({ content: 'Upload failed.', cssClass: 'e-toast-danger' });
toastObj.show({ content: 'Low disk space.', cssClass: 'e-toast-warning' });
toastObj.show({ content: 'Update available.', cssClass: 'e-toast-info' });
Quick Toast via ToastUtility
typescript
import { ToastUtility } from '@syncfusion/ej2-angular-notifications';
ToastUtility.show('Operation successful', 'Success', 3000);
Toast with Progress Bar + Close Button
html
<ejs-toast [showProgressBar]="true" [showCloseButton]="true" [timeOut]="4000">
</ejs-toast>
Toast Positioned Bottom-Center
typescript
public position = { X: 'Center', Y: 'Bottom' };
html
<ejs-toast [position]="position"></ejs-toast>
Action Buttons
typescript
public buttons = [
{ model: { content: 'Undo' }, click: () => this.onUndo() },
{ model: { content: 'Dismiss' } }
];
Static Toast (no auto-dismiss)
html
<ejs-toast [timeOut]="0" [showCloseButton]="true"></ejs-toast>
Key Properties
| Property | Type | Default | Purpose |
|---|
| any | null | Toast heading text or HTML |
| any | null | Toast body text or HTML |
| number | 5000 | Auto-dismiss after ms (0 = static) |
| ToastPositionModel | {X:'Left',Y:'Top'} | Screen position |
| boolean | false | Show × dismiss button |
| boolean | false | Show countdown progress bar |
| string | 'Rtl' | Progress bar direction (Ltr/Rtl) |
| boolean | true | Insert new toasts before old ones |
| string | null | Custom CSS classes |
| string | null | CSS class for top-left icon |
| string/Element | null | Container element (default: body) |
| string/number | '300' | Toast width |
| string/number | 'auto' | Toast height |
| ButtonModelPropsModel[] | [{}] | Action buttons |
| ToastAnimationSettingsModel | FadeIn/FadeOut | Show/hide animation |
| number | 1000 | Extra time on hover |
| boolean | false | Right-to-left rendering |
Common Use Cases
| Scenario | Approach |
|---|
| Simple one-liner notification | Use |
| Typed notification (success/error) | cssClass: 'e-toast-success'
or ToastUtility.show(..., 'Success', ...)
|
| Notification requiring user action | Add array with click handlers |
| Persistent alert until dismissed | Set + |
| Multiple simultaneous toasts | Use separate instances with different containers |
| Notification in custom container | Set property to element reference or selector |
| Prevent duplicate messages | Cancel in event if same title already visible |
| Mobile-friendly (no swipe dismiss) | Cancel when |
| Progress indicator | , customize via event |