Pull to refresh

Comments 4

Спасибо за перевод, в данной статье есть дельные советы.

Но перевод неточный и в некоторых моментах вводит в заблуждение, особенно по-поводу инкапсуляции сервисов.

> As services have generally a global scope…
> Сервисы имеют тоже пространство имен, что и модули…

И тут вступает определенная сложность самой модульной системы Angular: если сервис провайдится в любом модуле на любом уровне (кроме LazyLoad), то сревис будет доступен глобально и при многократном импорте — будет заменятся.

Кроме случаев, когда он провайдится в рамках директивы/компонента, тогда будет создан новый экземпляр локально.

Внутри каждого Lazy-модуля такое же локальное поведение, плюс видны все сервисы из AppModule.

Отличный материал по этой теме: blog.angularindepth.com/avoiding-common-confusions-with-modules-in-angular-ada070e6891f

Автор в оригинале несколько раз делает упор на этой особенности, к сожалению в переводе эта информация слишком упрощена.
Да, когда писал смотрел куда в другую сторону, поправил.

Я, честно говоря, не вижу в данном подходе какой-то сложности. По-моему это типичное решение аля синглтон. Мы имеем один экземпляр сервиса в приложении и в случае обращения нему — обращаемся к этому экземпляру или создаем новый, если он не был создан ранее. Если, конечно, мы не создаем сервис внутри директивы\компонента и т.д.

П.С. Прозвучит как оправдание, но это мой первый опыт перевода.
Тут дело не в создании экземпляров, а в «инкапсуляции» сервисов, интуитивно кажется, что они ведут себя также, как и директивы/компоненты, но это не так — они попадают в глобальный скоуп.

> П.С. Прозвучит как оправдание, но это мой первый опыт перевода.

Главное — не останавливаться :)
Главное — не останавливаться :)

Ни в коем разе :)
Sign up to leave a comment.

Articles

Change theme settings