javascript - Angular - Skapas en komponent som används flera gånger helt av sig själv?


Jag har en liten fråga om Angular-komponenter.

Jag läser ofta att man endast bör använda komponenter för att visa data och interagera med användaren, och för din "affärslogik" bör man föredra tjänster.

Så min fråga är följande (bara ett exempel):

Säg att jag har gjort en komponent för att ladda upp filer via drag och släpp. Jag har logiken för att få data från drag och släpp och lagra den i en array (och kanske många andra funktioner) inuti den komponentens TypeScript-fil.

Nu när jag inkluderar denna komponent två gånger inom en föräldrakomponent (eftersom jag till exempel behöver två uppladdningsfält), refererar båda till samma eller skapas även programlogiken inuti den komponenten två gånger för varje instans?

Om så är fallet, då borde jag försöka behålla så mycket gemensam programlogik som möjligt i singleton-tjänster så att de bara skapas en gång vid körning och inte slösar med minne osv., eller hur?

Hoppas någon förstår vad jag menar :)

tack i förväg!

Svar #1

Om du lägger till komponenten två gånger i din förälder, kommer två olika instanser att skapas (var och en med eget unikt omfång).

Du bör dock abstrahera uppladdnings-/hanteringslogik till en tjänst. Tillhandahåll den tjänsten i modulen för att göra den till en singleton. Om du vill ha en instans per komponent, tillhandahåll den då inom komponenten.

Svar #2

Om du skapar två komponenter i din mall som är liknande till exempel:

<app cumstom></app custom>
<app cumstom></app custom>

Detta kommer att resultera i att två objekt skapas som båda har sin egen modell (data) och vy. De vet inget om varandra.

Om du vill att de ska kommunicera är det ofta smart att använda en tjänst som du kan injicera i båda komponenterna så att de kan dela samma data. Om en tjänst tillhandahålls i din ngmodule kommer den bara att skapas en gång (så den är en singleton).