@ngrx/signals Store methods in separate file

Discussão em 'Angular' iniciado por Lightweight, Janeiro 29, 2025.

  1. Lightweight

    Lightweight Guest

    I'm just starting to learn ngrx signals and one thing that struck me is that a "store" file could become quite large, quite quickly so ideally I would like to break it into separate parts.

    Below is an example of how I might split out the "withMethods" factory but I cannot work out what the type of "store" should be in the bookMethodsFactory function and how I can avoid a circular dependency?

    import { inject } from '@angular/core';
    import { patchState, signalStore, withMethods, withState } from '@ngrx/signals';

    // book.model.ts
    export interface Book {
    id: number;
    title: string;
    }

    // books.service.ts
    export class BooksService {
    public getBooks(): Promise<Book[]> {
    return Promise.resolve([
    { id: 1, title: 'Book 1' },
    { id: 2, title: 'Book 2' },
    { id: 3, title: 'Book 3' }
    ]);
    }
    }

    type BooksState = {
    books: Book[];
    };

    // book
    const initialState: BooksState = {
    books: []
    };

    export const BooksStore = signalStore(
    { protectedState: false },
    withState(initialState),
    withMethods(bookMethodsFactory)
    );

    // book.methods.ts
    export const bookMethodsFactory = ((store: ???) => {
    const bookService = inject(BooksService);

    return {
    async loadBooks(): Promise<void> {
    const books = await bookService.getBooks();
    patchState(store, { books });
    }
    }
    });

    Continue reading...

Compartilhe esta Página