Давайте рассмотрим этот пример
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
позволяет вам не допускать попадания проецируемого контента в ваши службы, что может быть особенно полезно в библиотеках.