I have an Angular Service which lets me load data using HttpClient.request(...)
and returns the data as an Observable.
Within my ngrx SignalStore I call these service methods within rxMethod()
s.
One of my service methods does not have any parameters. So calling it within an rxMethod()
is not an option, because rxMethod()
requires a parameter, be it
a static value, signal, or observable as an input argument
So this won't work, because I do not have a parameter to call load() with:
withMethods((
store,
service = inject(SomeService),
) => ({
load: rxMethod(pipe(
switchMap(() => service.getAll$()
.pipe(
tap(models => {
store.initWithEntities(models);
}),
),
),
)),
}),
),
What is the best practice in this case? I'd rather not use a normal SignalStore method, because I'd like to not have to bother with subscription management.
Apparently, passing void as the rxMethods type argument works. However, as in my case, eslint might not be happy with it.
So this would work:
withMethods((
store,
service = inject(SomeService),
) => ({
load: rxMethod<void>(pipe(
switchMap(() => service.getAll$()
.pipe(
tap(models => {
store.initWithEntities(models);
}),
),
),
)),
}),
),
Which can then be called without a parameter, like so: store.load()