Was sind Viewprovider in Angular? Und was ist der Unterschied zwischen s / w-Anbietern und Ansichtsanbietern?

76

Was ist viewProviders im folgenden Code? Und wie unterscheidet es sich von Anbietern?

class Greeter {
   greet(name:string) {
     return 'Hello ' + name + '!';
   }
}    
@Component({
  selector: 'greet',
  viewProviders: [
    Greeter
  ],
  template: `<needs-greeter></needs-greeter>`    
})
class HelloWorld {
}
Vikram Babu Nagineni
quelle

Antworten:

105

In Ihrem Beispiel gibt es keinen Unterschied zwischen Anbietern und viewProvidern, da die Vorlage von HelloWorld nicht verwendet wird <ng-content>. Wenn Sie Inhalte innerhalb projiziert haben <ng-content>...</ng-content>, konnte Greeter nicht in die projizierten Inhalte eingefügt werden, da Sie diese verwenden

viewProviders: [Greeter] 

Wenn Sie möchten, dass Greeter möglicherweise in den projizierten Inhalt eingefügt wird, würden Sie verwenden

providers: [Greeter]

So viewProvidersbegrenzt die Anbieter auf Kinder andere als projizierte Inhalt, während providersalle Kinder ermöglicht es dem Anbieter zu verwenden. Der Wert besteht darin, viewProvidersdass Sie verhindern können, dass projizierte Inhalte mit Ihren Diensten in Konflikt geraten, was insbesondere in Bibliotheken nützlich sein kann.

Mark Zamoyta
quelle
2
Upvoted obwohl ich nicht ganz verstanden habe .. Nur weil es "richtig" klingt.
Rückruf
3
Ich fand dieses Video hilfreich: youtube.com/…
Flyer
Gute Antwort! Knackig mit einer 'Warum'-Argumentation.
Bhargav Shah
Um diese Antwort zu verstehen, sollten wir zuerst verstehen, was der Unterschied zwischen Ansichtskind und inhaltlichem (projiziertem) Kind ist.
Mithun Kumar