Ngrx SignalStore: вызов сервисной функции без параметров, которая возвращает Observable

У меня есть служба Angular, которая позволяет мне загружать данные с помощью HttpClient.request(...) и возвращает данные как Observable. В моем SignalStore ngrx я вызываю эти методы обслуживания в пределах rxMethod()s.

Один из моих методов обслуживания не имеет параметров. Поэтому вызывать его внутри rxMethod() не вариант, потому что rxMethod() требует параметра, будь то

статическое значение, сигнал или наблюдаемая величина в качестве входного аргумента

Так что это не сработает, потому что у меня нет параметра для вызова load():

withMethods((
        store,
        service = inject(SomeService),
    ) => ({
        load: rxMethod(pipe(
            switchMap(() => service.getAll$()
                .pipe(
                    tap(models => {
                        store.initWithEntities(models);
                    }),
                ),
            ),
        )),
    }),
),

Какова наилучшая практика в этом случае? Я бы предпочел не использовать обычный метод SignalStore, потому что мне не хотелось бы возиться с управлением подписками.

Можете ли вы поделиться тем, что вы пытались/пытаетесь сделать?

Matthieu Riegler 19.06.2024 10:44

Я добавил нерабочий пример

Jargo 19.06.2024 11:24
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
2
2
100
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Судя по всему, передача void в качестве аргумента типа rxMethods работает. Однако, как и в моем случае, Эслинту это может не понравиться.

Итак, это будет работать:

withMethods((
        store,
        service = inject(SomeService),
    ) => ({
        load: rxMethod<void>(pipe(
            switchMap(() => service.getAll$()
                .pipe(
                    tap(models => {
                        store.initWithEntities(models);
                    }),
                ),
            ),
        )),
    }),
),

Который затем можно вызвать без параметра, например: store.load()

Другие вопросы по теме