В чем разница между Component.providers и Component.viewProviders? - PullRequest
2 голосов
/ 05 марта 2020

Я пытаюсь разделить службу между родительским компонентом и его дочерним, и мне было интересно, какова функциональность viewProviders. В чем разница с провайдерами?

1 Ответ

1 голос
/ 05 марта 2020

Давайте рассмотрим этот пример

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

В этом примере нет разницы между провайдерами и viewProviders, поскольку шаблон HelloWorld не использует <ng-content>. Если вы проецируете контент в <ng-content>...</ng-content>, то Greeter не может быть введен в проецируемый контент, потому что вы используете

viewProviders: [Greeter] 

Если вы хотите, чтобы Greeter потенциально мог быть внедрен в проецируемый контент, вы ' d use

providers: [Greeter]

Так что viewProviders ограничивает поставщика только для детей, кроме проецируемого контента, в то время как providers позволяет всем детям использовать поставщика. Значение заключается в том, что viewProviders позволяет вам не допускать попадания проецируемого контента в ваши службы, что может быть особенно полезно в библиотеках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...