Computed og metoder
Legg til derivert tilstand og oppdateringsmetoder.
Computed og metoder er en gratis leksjon i Angular Academy på CoddyKit. Dette er leksjon 2 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.
Utover rå tilstand
En nyttig store eksponerer avledede verdier og funksjonalitet. SignalStore legger til dette med withComputed for lesemodeller og withMethods for handlinger.
withComputed
withComputed mottar store-ens gjeldende signaler og returnerer et objekt med computed()-signaler. De mellomlagrer verdier og oppdateres automatisk som alle computed-signaler.
import { signalStore, withState, withComputed } from '@ngrx/signals';
import { computed } from '@angular/core';
export const CartStore = signalStore(
withState({ items: [] as Item[] }),
withComputed(({ items }) => ({
count: computed(() => items().length),
total: computed(() => items().reduce((s, i) => s + i.price, 0))
}))
);Lesing av computed-signaler
Computed-medlemmer vises på store-en akkurat som tilstand. Les store.count() og store.total() i maler; de oppdateres når items endres.
template: 'Items: {{ store.count() }} — {{ store.total() }}'withMethods
withMethods mottar store-en og returnerer navngitte metoder. Inne i dem bruker De patchState til å oppdatere tilstanden uforanderlig.
import { withMethods, patchState } from '@ngrx/signals';
withMethods((store) => ({
add(item: Item) {
patchState(store, (s) => ({ items: [...s.items, item] }));
},
clear() {
patchState(store, { items: [] });
}
}))Metoder kan også lese tilstand
Inne i en metode kan De lese gjeldende signaler fra store-argumentet for å ta avgjørelser før tilstanden oppdateres.
withMethods((store) => ({
toggle(id: string) {
const exists = store.items().some(i => i.id === id);
if (!exists) return;
patchState(store, (s) => ({
items: s.items.map(i => i.id === id ? { ...i, on: !i.on } : i)
}));
}
}))Metoder kan bruke computed
Fordi withComputed kjøres før withMethods, kan metoder lese computed-medlemmer som store-en allerede eksponerer.
withMethods((store) => ({
checkout() {
if (store.total() === 0) return;
// proceed...
}
}))Injisering av avhengigheter
withMethods kjøres i en injeksjonskontekst, så De kan kalle inject() inni den for å hente tjenester som HttpClient eller en ruter.
withMethods((store, http = inject(HttpClient)) => ({
load() {
http.get<Item[]>('/api/items')
.subscribe(items => patchState(store, { items }));
}
}))Rekkefølgen på features
Features settes sammen ovenfra og ned. Plasser withState først, deretter withComputed (som leser tilstand), og så withMethods (som leser tilstand og computed). Omvendt rekkefølge fører til typefeil.
Innkapsling
Komponenter kaller store.add(item) eller leser store.total(). De kaller aldri patchState direkte, slik at all endringslogikk holdes inne i store-en.
Rene computed-signaler, metoder med bivirkninger
Hold withComputed-funksjoner rene (de skal bare utlede verdier). Plasser bivirkninger, som HTTP-kall eller navigering, inne i withMethods.
Testing av metoder
SignalStore-er er injiserbare klasser. I tester tilbyr De store-en via TestBed, kaller en metode og kontrollerer deretter tilstanden og computed-signalene synkront.
const store = TestBed.inject(CartStore);
store.add({ id: '1', price: 10 });
expect(store.count()).toBe(1);
expect(store.total()).toBe(10);Hurtigsjekk
Test forståelsen Deres av computed-signaler og metoder.
Oppsummering
De utvidet en SignalStore med withComputed for mellomlagrede lesemodeller og withMethods for innkapslede handlinger som bruker patchState og injiserte tjenester. Rekkefølgen på features sørger for at hvert lag kan lese lagene foran seg.
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 «Computed og metoder» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Angular Academy, inkludert «Computed og metoder», 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 «Computed og metoder»?
Legg til derivert tilstand og oppdateringsmetoder. 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 2 av 4.
Hvor lang tid tar leksjonen «Computed og metoder»?
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
- Opprette en SignalStore
- Computed og metoder
- rxMethod for asynkront arbeid
- Entiteter og egendefinerte funksjoner