Разве Angular 4 ReactiveFormsModule не должен использовать шаблон forRoot?

Я читал здесь действительно хорошо написанную статью о загрузке модуля Angular - https://medium.com/@cyrilletuzi/understanding-angular-modules-ngmodule-and-their-scopes-81e4ed6f7407

Поскольку провайдеры в функциональных модулях NgModule фактически внедряются глобально (и с нетерпением), в статье говорится о шаблоне «forRoot», используемом в таких модулях, как RouterModule.

Я наткнулся на ReactiveFormsModule - https://angular.io/api/forms/ReactiveFormsModule, у которого есть поставщик FormBuilder, но, похоже, он не использует шаблон forRoot. Разве это не означает, что каждый функциональный модуль, использующий ReactiveFormsModule, в конечном итоге воссоздает поставщика FormBuilder? Я что-то упускаю?


person raksugi    schedule 22.10.2017    source источник
comment
прочтите статью Как избежать путаницы с модулями в Angular, который подробно описывает forRoot использование   -  person Max Koretskyi    schedule 22.10.2017


Ответы (1)


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

Если вы импортировали ReactiveFormsModule в модули с отложенной загрузкой, то будет создан FormBuilder экземпляр для каждого модуля с отложенной загрузкой. На самом деле это не имеет значения, потому что FormBuilder не имеет состояния. Таким образом, отсутствие синглтона не имеет значения для того, как работает FormBuilder, и поскольку у него нет состояния, это также не имеет значения с точки зрения памяти.

person Günter Zöchbauer    schedule 22.10.2017
comment
Имеет смысл. Если я правильно понял, добавление forRoot в ReactiveFormsModule также не повлияет на поведение. Но для модулей со службами, у которых есть состояние, отложенная загрузка может иметь значение, поскольку в этом сценарии внедрение происходит на уровне функционального модуля. Пожалуйста, поправьте меня, если я ошибаюсь. - person raksugi; 23.10.2017
comment
Это определенно имеет значение, если вам нужен один экземпляр глобальной службы приложения. Модули с отложенной загрузкой вводят дочернюю область, в которой они регистрируют своих поставщиков услуг, в результате чего создается экземпляр службы для каждого экземпляра модуля с отложенной загрузкой, и служба не будет доступна для модулей, не загружаемых с помощью отложенной загрузки. - person Günter Zöchbauer; 23.10.2017