Що таке провайдери перегляду в Angular? І в чому різниця між ч / б постачальниками та постачальниками перегляду?


79

Що таке viewProviders у наведеному нижче коді? І чим він відрізняється від провайдерів?

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

Відповіді:


108

У вашому прикладі немає різниці між провайдерами та viewProviders, оскільки шаблон HelloWorld не використовує <ng-content>. Якщо ви проектували вміст всередині <ng-content>...</ng-content>, тоді Greeter не міг бути введений у прогнозований вміст, оскільки ви використовуєте

viewProviders: [Greeter] 

Якщо ви хотіли, щоб Greeter потенційно вводився у прогнозований вміст, ви б використали

providers: [Greeter]

Отже, viewProvidersобмежує постачальника дітьми, крім проектованого вмісту, і providersдозволяє всім дітям користуватися постачальником. Цінність полягає в тому, що viewProvidersви можете запобігти зіткненню проектованого вмісту з вашими послугами, що може бути особливо корисно в бібліотеках.


2
Проголосував, хоча я до кінця не розумів .. Просто тому, що це "звучить" правильно.
зворотний дзвінок

4
Я знайшов це відео як корисне: youtube.com/…
листівка

Чудова відповідь! Чітко з міркуваннями "чому".
Бхаргав-шах,

1
Щоб зрозуміти цю відповідь, спочатку ми повинні зрозуміти, в чому різниця між поглядом дитини та вмістом (прогнозованим) дитини;
Mithun Kumar

останні три рядки добре пояснює.
Hassan Raza

4
  1. Якщо ми хочемо поділитися одним екземпляром послуги в усьому нашому додатку, ми налаштовуємо його у постачальників на нашому NgModule.
  2. Якщо ми хочемо мати по одному екземпляру служби для кожного компонента та ділитися ним з усіма дочірніми компонентами компонента, ми налаштовуємо його у властивості провайдерів у нашому декораторі компонентів. Дитина - погляд дітей.
  3. Якщо ми хочемо мати по одному екземпляру служби для кожного компонента і ділитися лише з дочірніми елементами перегляду компонента, а не з дочірніми елементами вмісту компонента, ми налаштовуємо його у властивості viewProviders нашого декоратора компонентів.

повністю погоджений.
Hassan Raza
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.