Wat zijn viewproviders in Angular? En wat is het verschil z/w providers vs viewproviders?

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 viewProvidersbeperkt de provider tot andere kinderen dan de geprojecteerde inhoud, terwijl providersalle kinderen toestaan ​​de provider te gebruiken. De waarde is dat viewProvidersu in staat stelt te voorkomen dat geprojecteerde inhoud uw services verstoort, wat vooral handig kan zijn in bibliotheken.


Antwoord 2, autoriteit 18%

  1. Als we één instantie van een service willen delen met onze hele applicatie, configureren we deze in providers op onze NgModule.
  2. 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.
  3. 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

Other episodes