Bevezetés
Az Angular 14-től kezdve az új inject funkciót komponensekben, direktívákban és csövekben használhatjuk. Ennek a megközelítésnek számos előnye van, mivel jelentősen javítja kódunk olvashatóságát és újrafelhasználhatóságát.
Például:
export class MyComponent { constructor(private apiService: APIService) {}
}
csak írhatjuk:
export class MyComponent { private apiService = inject(APIService);
}
Ez a megközelítés nagyon hasznos a nagyszámú függőséggel rendelkező komponensek esetében, mivel sokkal olvashatóbb a függőségek átadása osztályunk definíciójában, nem pedig a konstruktorban.
Tehát a kódot így módosíthatjuk:
export class MyComponent { constructor( private apiService: APIService, private router: Router, private activatedRoute: ActivatedRoute ) {}
}
ehhez:
export class MyComponent { private apiService = inject(APIService); private router = inject(Router); private activatedRoute = inject(ActivatedRoute);
}
Újrafelhasználható funkciók
Az injekciós funkció használatának egyik fő előnye az újrafelhasználható és moduláris funkciók létrehozásának lehetősége.
Példa erre a kód, amely a megfigyelhető adatokról való leiratkozáshoz szükséges, ha az összetevő megsemmisül.
Ahelyett, hogy ilyen kódot írna:
export class MyComponent { private destroy$ = new Subject(); ngOnInit() { this.apiService.getData().pipe( takeUntil(this.destroy$) ).subscribe(data => console.log(data)); } ngOnDestroy(): void { this.destroy$.next(true); this.destroy$.complete(); }
}
egyszerűen leírhatjuk:
export class MyComponent { private destroy$ = untilDestroyed(); ngOnInit() { this.apiService.getData().pipe( takeUntil(this.destroy$) ).subscribe(data => console.log(data)); }
}
Ahelyett, hogy minden komponensben megismételnénk a leiratkozás logikáját, egyszerűen létrehozhatunk egy újrafelhasználható függvényt a leiratkozási logika kezelésére:
export function untilDestroyed() { const subject = new Subject<void>(); const viewRef = inject(ChangeDetectorRef) as ViewRef; viewRef.onDestroy(() => { subject.next(); subject.complete() }); return takeUntil(subject.asObservable());
}
Néhány más használati eset magában foglalja a logika írását egy adott lekérdezési paraméter lekéréséhez.
Tehát ahelyett, hogy írnánk:
export class MyComponent { id$ = this.activatedRoute.queryParams.pipe( map(params => params.id) ); constructor(private activatedRoute: ActivatedRoute) {}
}
egyszerűen átírhatjuk a komponensünket a következőképpen:
export class MyComponent { id$ = getParam$('id');
}
Az aktuális lekérdezési paraméter meghatározására szolgáló logika ezután közös függvényként átírható:
export function getParam$(key: string) { const activatedRoute = inject(ActivatedRoute); return activatedRoute.queryParams.pipe( map(params => params[key]) );
}
Ezzel elkerülhető, hogy több összetevőben meg kelljen duplikálnia a logikát.
- SEO által támogatott tartalom és PR terjesztés. Erősödjön még ma.
- Platoblockchain. Web3 metaverzum intelligencia. Felerősített tudás. Hozzáférés itt.
- Forrás: https://www.codementor.io/alexroutledge/using-dependency-injection-functions-instead-of-constructors-23qolzza06
- :is
- a
- képesség
- és a
- szögletes
- megközelítés
- VANNAK
- AS
- BE
- Előnyök
- TUD
- esetek
- változik
- osztály
- kód
- Közös
- összetevő
- alkatrészek
- Konzol
- teremt
- Jelenlegi
- dátum
- Függőség
- elpusztított
- Határozzuk meg
- irányelvek
- Minden
- példa
- A
- ból ből
- funkció
- funkciók
- fogantyú
- tekintettel
- HTTPS
- ID
- javítja
- in
- tartalmaz
- helyette
- IT
- Kulcs
- nagy
- mint
- Fő
- moduláris
- több
- többszörös
- Új
- szám
- of
- Más
- paraméter
- elhalad
- csövek
- Plató
- Platón adatintelligencia
- PlatoData
- megakadályozása
- magán
- Inkább
- kötelező
- visszatérés
- újrahasználható
- router
- s
- számos
- jelentősen
- egyszerűen
- különleges
- Húr
- tárgy
- A
- nak nek
- igaz
- használ
- val vel
- ír
- írás
- zephyrnet