Skip to content

Use SignalDB in Angular ​

This guide will show you how to incorporate SignalDB into your Angular app, including setting up collections and using SignalDB’s reactive features within Angular components.

Requirements ​

Before we begin, ensure you have a basic understanding of Angular and an existing Angular project ready. If not, refer to the Angular Tutorial.

It’s also helpful to be familiar with signal-based reactivity. You can learn more about this in the Core Concepts section and explore Angular Signals to see how reactivity is handled in the framework.

Installing SignalDB ​

To begin, install SignalDB by running this command in your terminal:

bash
npm install @signaldb/core

Next, install the Angular-specific reactivity adapter for SignalDB:

bash
npm install @signaldb/angular

Setting Up SignalDB ​

With SignalDB installed, you’ll now set up a collection and configure the reactivity adapter for Angular:

js
import { Collection } from '@signaldb/core';
import angularReactivityAdapter from '@signaldb/angular';

const Posts = new Collection<{ id: string, title: string, author: string }>({
  reactivity: angularReactivityAdapter,
});

In this example, we define a Posts collection and use the Angular reactivity adapter to enable seamless updates in your Angular components.

Building an Angular Component ​

Let’s now create an Angular component that uses SignalDB to display and manage a list of posts:

typescript
import { Component, effect } from '@angular/core';
import { RouterOutlet } from '@angular/router';
import { Collection } from '@signaldb/core';
import angularReactivityAdapter from '@signaldb/angular';

const Posts = new Collection<{ id: string, title: string, author: string }>({
  reactivity: angularReactivityAdapter,
});

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [RouterOutlet],
  template: `
    <ul>
      <li><button (click)="insertPost()">Add Post</button></li>
      @for (item of items; track item.title) {
        <li>{{item.title}} ({{item.author}})</li>
      }
    </ul>
  `,
})
export class AppComponent {
  items: {id: string, title: string, author: string}[] = [];

  insertPost() {
    Posts.insert({ title: 'Post 1', author: 'Author 1' });
  }

  constructor() {
    effect((onCleanup) => {
      const cursor = Posts.find();
      this.items = cursor.fetch();
      onCleanup(() => {
        cursor.cleanup();
      });
    });
  }
}

Key Concepts: ​

  1. Collection Setup: We create a Posts collection with @signaldb/angular to enable reactivity.
  2. Component Overview: The AppComponent uses Angular’s effect() to automatically update the items array whenever the Posts collection changes.
  3. Rendering in Template: The template renders a list of posts using an @for loop, and the insertPost() method adds a new post when the "Add Post" button is clicked.
  4. Effect Hook: The effect() function handles reactivity, ensuring the component stays in sync with changes in the Posts collection. The cleanup function removes the cursor when the component is destroyed.

Wrapping Up ​

You have now successfully integrated SignalDB into an Angular app and created a reactive component to display and manage posts. With this setup, you can leverage SignalDB’s reactive capabilities to handle data updates and synchronization in your Angular application.

Next Steps ​

Now that you’ve learned how to use SignalDB in Angular, you maybe want to explore the possibilities how you can synchronize the data with your backend. Take a look at the Synchronization Overview to get started

Released under the MIT License.