Exploring The Hidden Corners of Angular Dependency Injection
Een paar maanden geleden waren Kapunahele Wong en ik aan het brainstormen over ideeën voor praatvoorstellen die we samen konden doen. Het was rond de tijd dat ik besloot om Ivy te onderzoeken, dus ik dacht dat dat wel een goed idee zou zijn voor een lezing. Kapunahele had echter een ander idee:
The Wizard of The Forest
We voegen een enkele regel toe aan ons vorige voorbeeld, en geven een 🧙 koninkrijk voor de ForestComponent:
providers:
En dit is het resultaat:
Nu is dit interessant – we zien een mengelmoes van koninkrijken binnen het bos! Het boselement zelf bevindt zich in het 🧙 koninkrijk, maar de geprojecteerde inhoud lijkt een gespleten persoonlijkheid te hebben: de eenhoorns behoren ook tot het 🧙 koninkrijk, maar de tekst erboven toont 🧟 koninkrijk?
We hebben zowel deze eenhoorns als de tekst op dezelfde plaats gedefinieerd, regels 12-15 van het app.component.html sjabloon. Wat echter van belang is, is de plaats waar de component zelf in het DOM is gemaakt. De tekst in regel 12 is eigenlijk hetzelfde als wat we doen in regel 4 – we lezen de kingdom eigenschap van dezelfde AppComponent instantie. Het DOM element voor deze component is eigenlijk een voorouder van het <app-forest> DOM element. Dus toen deze AppComponent instantie werd gemaakt, werd het geïnjecteerd met het 🧟 koninkrijk.
De twee <app-unicorn> elementen, zijn echter binnen de <app-forest> DOM-elementen, dus wanneer hun instanties van UnicornComponents worden gemaakt, angular gaat eigenlijk de DOM en ziet de waarde die we voor de KingdomService binnen de ForestComponent, en dus deze eenhoorns worden geïnjecteerd met het 🧙 koninkrijk.
U kunt een ander gedrag bereiken als u providers verandert in viewProviders bij het definiëren van de ForestComponent. Je kunt hier meer leren over View Providers, en bekijk ook dit code voorbeeld, waar ik ForestComponent heb veranderd om View Providers te gebruiken, zodat nu zelfs de eenhoorns in het bos worden geïnjecteerd met het 🧟 koninkrijk. Met dank aan Lars Gyrup Brink Nielsen die me hierop wees!
Ik heb de Chrome T-Rex in deze blogpost
Keep Exploring!
Ik hoop dat u zojuist iets nieuws heeft geleerd over Angular’s Dependency Injection-systeem. Dit is slechts een van de dingen die Kapunahele en ik hebben onderzocht toen we onze toespraak voor AngularConnect voorbereidden. Er is nog veel meer – je bent uitgenodigd om verder te verkennen, en we zullen ook de slides en de link naar de video delen na de talk. Oh, en er zal ook wat live coding zijn. Het wordt heel leuk!
Als je meer wilt weten over de ins en outs van de Angular Injector, zijn hier een paar artikelen die ik erg nuttig vond:
Wat je altijd al wilde weten over Angular Dependency Injection
Een merkwaardig geval van de @Host decorator en Element Injectors in Angular
Hierarchische Dependency Injectors (Angular Docs)
En als je AngularConnect bijwoont, ben je van harte uitgenodigd om hallo te komen zeggen!