angular - NgRx Data - Hur man kopplar in i en addOne-success Action på ett typ-säkert sätt?
Jag är ny på @ngrx/data och jag går igenom dokumentationen.
Med hjälp av guiden har jag kunnat återskapa det jag tidigare gjort manuellt - till exempel genom att använda tjänsten på denna översiktssida fungerar följande genom att anropa REST-API och lägga till leverantör till butiken.
komponent.ts
onSave(supplier: Supplier) {
this.supplierService.add(supplier);
}
Jag vet att för effekten kan jag göra följande:
hello$ = createEffect(
() =>
this.actions$.pipe(
ofType('[Supplier] @ngrx/data/save/add-one/success'),
tap(console.log)
),
{ dispatch: false }
);
MEN - finns det ett typsäkert sätt att koppla in sig på en lyckad API-anropsåtgärd/entitetsåtgärder i allmänhet?
Uppdatering - förtydligande
Jag använder @ngrx/data och så jag skapar inte handlingarna direkt själv tillsammans med exporten av typer.
Vid lyckad tilläggning av en leverantör - vilket efter ett HTTP-anrop resulterar i en åtgärd med typen: '[Supplier] @ngrx/data/save/add-one/success' - vill jag utföra en effekt. Istället för att använda strängen '[Supplier] @ngrx/data/save/add-one/success' (visad ovan) finns det en typ-säker krok?
Tidigare (när jag själv skapade åtgärderna) skulle jag exportera en uniontyp och göra ofType(supplierActions.addSupplier)
Uppdatering - närmare ett svar
Hittade ofEntityType och ofEntityOp vilket tar mig närmare mitt mål eftersom dessa fungerar som ofType:
hello$ = createEffect(
() =>
this.actions$.pipe(
ofEntityType('Supplier'),
ofEntityOp(EntityOp.SAVE_ADD_ONE_SUCCESS),
tap(console.log)
),
{ dispatch: false }
);
Nu gäller det bara att hitta ett sätt att skriva 'Supplier' från entityMetadata
const entityMetadata: EntityMetadataMap = {
Supplier: {}
};
Svar #1
Du kan göra något liknande detta:
let array = Object.keys(entityConfig.entityMetadata);
det kommer att returnera namnet på dina enheter, i det här fallet "Leverantör". sedan använder du bara arrayen som parameter för ofEntityType
hello$ = createEffect(
() =>
this.actions$.pipe(
ofEntityType(array),
ofEntityOp(EntityOp.SAVE_ADD_ONE_SUCCESS),
tap(console.log)
),
{ dispatch: false }
);
