Using a data source
Defining the model and the loader
```typescript linenums="1" import { inject } from '@angular/core'; import { HttpClient } from '@angular/common/http';
import { NgssmDataLoading } from 'ngssm-data';
export const alertRulesKey = '@ngssm-data-demo:alert-rules'; export const alertRulesUrl = '/data/alert-rules.json';
export type AlertLevel = 'Info' | 'Warning' | 'Error';
export interface AlertRule { id: number; title: string; level: AlertLevel; }
export const alertRulesLoader: NgssmDataLoading
```
Registering the data source
```typescript hl_lines="20" linenums="1" import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; import { provideRouter, withComponentInputBinding, withHashLocation } from '@angular/router'; import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
import { provideConsoleAppender } from 'ngssm-store'; import { provideNgssmAgGrid } from 'ngssm-ag-grid'; import { provideNgssmData, provideNgssmDataSource } from 'ngssm-data';
import { routes } from './app.routes'; import { alertRulesKey, alertRulesLoader } from './model/alert-rule';
export const appConfig: ApplicationConfig = { providers: [ provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes, withHashLocation(), withComponentInputBinding()), provideHttpClient(withInterceptorsFromDi()), provideConsoleAppender('ngssm-data-demo'), provideNgssmAgGrid(), provideNgssmData(), provideNgssmDataSource(alertRulesKey, alertRulesLoader) ] };
```
Displaying the data
```html hl_lines="5 9" linenums="1"
```
```typescript hl_lines="20-23" linenums="1" import { ChangeDetectionStrategy, Component } from '@angular/core'; import { MatCard, MatCardContent, MatCardHeader, MatCardTitle } from '@angular/material/card';
import { AgGridAngular } from 'ag-grid-angular'; import { GridOptions, ValueGetterParams } from 'ag-grid-community';
import { NgssmAgGridThemeDirective } from 'ngssm-ag-grid'; import { dataSourceToSignal, NgssmDataReloadButtonComponent } from 'ngssm-data';
import { AlertRule, alertRulesKey } from '../../model';
@Component({
selector: 'app-alert-rules',
imports: [MatCard, MatCardHeader, MatCardTitle, MatCardContent, AgGridAngular, NgssmDataReloadButtonComponent, NgssmAgGridThemeDirective],
templateUrl: './alert-rules.component.html',
styleUrl: './alert-rules.component.scss',
changeDetection: ChangeDetectionStrategy.OnPush
})
export class AlertRulesComponent {
public readonly alertRulesSource = dataSourceToSignal
public readonly gridOptions: GridOptions = {
columnDefs: [
{
headerName: 'Id',
valueGetter: (params: ValueGetterParams
```