Wat is viewProviders in de onderstaande code? En hoe verschilt het van providers?
class Greeter {
greet(name:string) {
return 'Hello ' + name + '!';
}
}
@Component({
selector: 'greet',
viewProviders: [
Greeter
],
template: `<needs-greeter></needs-greeter>`
})
class HelloWorld {
}
Antwoord 1, autoriteit 100%
In jouw voorbeeld is er geen verschil tussen providers en viewProviders omdat de sjabloon van HelloWorld geen gebruik maakt van <ng-content>
. Als u inhoud projecteerde binnen <ng-content>...</ng-content>
, dan kon Greeter niet in de geprojecteerde inhoud worden geïnjecteerd omdat u
gebruikt
viewProviders: [Greeter]
Als je wilde dat Greeter mogelijk in de geprojecteerde inhoud zou worden geïnjecteerd, zou je
. gebruiken
providers: [Greeter]
Dus viewProviders
beperkt de provider tot andere kinderen dan de geprojecteerde inhoud, terwijl providers
alle kinderen toestaan de provider te gebruiken. De waarde is dat viewProviders
u in staat stelt te voorkomen dat geprojecteerde inhoud uw services verstoort, wat vooral handig kan zijn in bibliotheken.
Antwoord 2, autoriteit 18%
- Als we één instantie van een service willen delen met onze hele applicatie, configureren we deze in providers op onze NgModule.
- Als we één instantie van een service per component willen hebben en deze willen delen met alle onderliggende componenten van de component, configureren we deze in de provider-eigenschap op onze componentdecorateur. Kind is een weergave kinderen.
- Als we één instantie van een service per component willen hebben en alleen willen delen met de view-children van de component en niet met de content-children van de component, configureren we deze in de viewProviders-eigenschap van onze componentdecorateur.
Antwoord 3
deel één instantie van een service in de hele applicatie
-> configureer het in providers van root-module [AppModule]
één instantie van een service delen in de hele module
-> configureer het in providers van die module
één instantie van een service delen over de hele component
-> configureer het in providers van dat onderdeel
deel één instantie van een service over Component [alleen ViewChildren niet ContentChildren]
-> configureer het in viewProviders van dat onderdeel