Angular Academy · leksjon

Opprette en SignalStore

Definer tilstand med signalStore og withState.

Leksjon 1 av 413 trinn

Opprette en SignalStore er en gratis leksjon i Angular Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Angular Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Angular Academy inneholder totalt 4 leksjoner.

Hva er SignalStore

NgRx SignalStore er en lettvektsløsning for tilstandsbehandling bygget på Angular-signaler. De setter sammen en store av features som withState, withComputed og withMethods.

Installering

SignalStore ligger i pakken @ngrx/signals. Legg den til i Angular-prosjektet Deres, og importer deretter byggeklossene De trenger.

// terminal
// ng add @ngrx/signals
import { signalStore, withState } from '@ngrx/signals';

signalStore-fabrikken

signalStore() returnerer en injiserbar klasse. Send inn features som beskriver tilstanden og funksjonaliteten. Som standard tilbys store-en i root.

export const CounterStore = signalStore(
  { providedIn: 'root' },
  withState({ count: 0 })
);

withState

withState(initial) definerer starttilstanden. Hver egenskap på øverste nivå blir et signal på store-en, så store.count er et signal De kaller som store.count().

withState({
  count: 0,
  user: null as User | null,
  items: [] as Item[]
});

Injisering av store-en

Fordi fabrikken returnerer en injiserbar klasse, injiserer De den som en hvilken som helst tjeneste og leser tilstandssignalene i maler.

@Component({
  template: '<p>{{ store.count() }}</p>'
})
export class CounterComponent {
  store = inject(CounterStore);
}

patchState

Oppdater SignalStore-tilstanden med hjelpefunksjonen patchState. Den tar imot store-en samt delvise tilstandsobjekter eller oppdateringsfunksjoner, og bruker dem på en uforanderlig måte.

import { patchState } from '@ngrx/signals';

patchState(store, { count: 5 });
patchState(store, (s) => ({ count: s.count + 1 }));

Tilstandsdeler som signaler

Hver tilstandsnøkkel eksponeres som et individuelt signal. Når De leser én del, kobles De ikke til de andre, og maler oppdateres bare for delene de leser.

// given withState({ count: 0, name: '' })
store.count();  // number signal
store.name();   // string signal

Typing av tilstand

Typiser tilstanden eksplisitt for nullable felter eller arrayfelter, slik at SignalStore utleder korrekte signaltyper. Bruk as-konverteringer i startobjektet.

type State = { user: User | null; loading: boolean };

withState<State>({ user: null, loading: false });

Lokalt tilbudt kontra tilbudt i root

Utelat providedIn for å lage en komponentavgrenset store, og legg store-en til i komponentens providers. Da får hver komponentinstans sin egen isolerte tilstand.

@Component({
  providers: [CounterStore]
})
export class WidgetComponent {
  store = inject(CounterStore);
}

Sammensetting av features

Styrken til SignalStore ligger i sammensettingen: List opp flere features, så slås de sammen til én store. Rekkefølgen er viktig fordi senere features kan lese tidligere features.

export const TodoStore = signalStore(
  withState({ todos: [] as Todo[] })
  // withComputed(...), withMethods(...) added next
);

Ingen boilerplate

I motsetning til klassisk Redux-stil i NgRx (actions, reducers, effects og selectors) samler SignalStore tilstand og logikk i én deklarativ store, med langt mindre boilerplate.

Hurtigsjekk

Test det grunnleggende om SignalStore.

Oppsummering

De opprettet en SignalStore med signalStore() og withState, leste tilstandsdeler som signaler, oppdaterte dem uforanderlig via patchState og valgte mellom root-tilbudte og komponentavgrensede store-er. Neste tema er computed og metoder.

Gratis å komme i gang

Lær deg HTML med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
38
Leksjoner
144

Ofte stilte spørsmål

Er leksjonen «Opprette en SignalStore» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Angular Academy, inkludert «Opprette en SignalStore», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Angular Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Opprette en SignalStore»?

Definer tilstand med signalStore og withState. Du øver på Angular Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Angular Academy?

Ingen tidligere erfaring er nødvendig. Angular Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Opprette en SignalStore»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Angular Academy-leksjonen?

Ja. Alle Angular Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Opprette en SignalStore
  2. Computed og metoder
  3. rxMethod for asynkront arbeid
  4. Entiteter og egendefinerte funksjoner
← Tilbake til Angular Academy