Дор Моше
Это Статья Первоначально появился на dormoshe.io.
Многие из нас используют иерархический механизм впрыска зависимости угловых. Мы используем его через сервис или компонент для разрешения другого обслуживания или провайдера. Но мы знаем, что делает угловой, чтобы разрешить зависимости? Вероятно, нет, потому что угловые заботится о том, что нам нужно использовать его как черный ящик.
В этой статье мы откроем черный ящик и рассмотрим код модифицированного механизма разрешения зависимостей компонентов.
Вернуться к основам
Инъекция зависимости (Di) – мощный узор для управления зависимостями кода. УГЛУЧНАЯ ИСПОЛЬЗОВАННАЯ СИСТЕМА создает и доставляет зависимые услуги “как раз вовремя”. Угловой имеет свой собственный DI Framework, и мы не можем построить угловое приложение без него.
Угловая ди-система на самом деле является Иерархический система. Эта система поддерживает вложенные форсунки параллельно с помощью дерева компонентов. Инжектор создает зависимости с помощью поставщиков. Мы можем перенастроить инжекторы на любом уровне этого компонента. За кулисами каждый компонент устанавливает свой Собственный инжектор с нулем, один или более провайдеры, определенные для самого компонента.
Разрешение порядок
Иерархический ди имеет приказ к разрешению зависимостей. Когда компонент запрашивает зависимость, если она существует в @ Компонент. Производители Массив (компонентный инжектор), то эта зависимость будет предоставлена.
В другом месте угловой, продолжает инжектор родительского компонента и снова и снова проверяет. Если угловые не находят предка, он поставит эту зависимость через основной инжектор приложения. Это основная концепция иерархического DI механизма.
Давайте посмотрим код
Когда угловые инстанцирует компонент, он называет Резиноп функция. Подпись этой функции содержит контейнер для просмотра компонентов, элемент, определение зависимости и еще несколько аргументов. Мы сосредоточимся на представлении компонента и объекта зависимости. Объект зависимости содержит только одну зависимость компонента.
Вот Резиноп Функциональный скелет из углового репозитория GitHUB:
Функциональный скелет содержит основные концепции разрешения без краевых случаев. Полный код можно найти здесь Отказ В следующих частях мы рассмотрим функциональный скелет.
Паус
Восклицательный знак – это новая особенность Tymdercript 2.0. Действительно Оператор экспрессии после исправления может быть использован для утверждения о том, что его операнд не нулевой и не определен в контекстах, где проверяют тип типа не в состоянии сделать вывод о том, что факт. Угловые используют эту функцию часто, поэтому мы не должны бояться.
Часть 1 – Подготовка
Const; Код сохраняет оригинальный вид (контейнер зрения компонента) в переменной, поскольку переменная просмотра скоро изменится.
Const.takenkey; Код извлекает Tokenkey или ключ зависимости, например, Heroservice_4. . Этот ключ основывается с именем зависимости и сгенерированным числом для однозначно обработки зависимости.
Часть 2 – составляющий компонент и предков поиск
в то время как Цикл реализует этапы проверки источника @ Компонент. Производители и компоненты предка. В соответствии с ключом токена зависимости, провайдеры компонентов источника будут проверены в строках 1-3:
Если провайдер существует в строке 4, то исходный компонент удовлетворяет зависимости. Таким образом, если зависимость была создана в прошлом в строке 6, экземпляр вернется по Резиноп Функция в строке 10. Если это первый раз, когда компонент или его дети просят зависимость, это будет создано в строке 7 и вернется по Резиноп Функция в строке 10.
Если зависимость не найдена в Вид Компонентный инжектор, Eldef (View)! ; и View.Parent!; будет вызываться для продвижения переменной к родительскому элементу. в то время как Цикл продолжит работать до тех пор, пока в инжекторе предка не будет обнаружено зависимость. Если зависимость все еще не найдена после проверки всех предков, в то время как петля закончится и третья часть войдет в действие.
Часть 3 – корневой инжектор
Если прийти к этой части, зависимость не может быть удовлетворена любым из инжекторов предков компонентов. Тогда StartView или исходный компонент будет проверен в строке 1:
Если исходный компонент или один из его предков были загружены роутером розетки (компонент маршрутизатора), root Инжектор – это Выход инжектор Отказ Этот инжектор поставляет некоторые зависимости, такие как Маршрутизатор услуга. В противном случае корневой инжектор – инжектор компонента Bootstrap.
Если зависимость находится в строке 3, то значение будет возвращено Резиноп функция. В другом случае часть 4 войдет в действие.
Часть 4 – Инжектор модуля приложения
Когда мы приходим к этой части, это означает, что зависимость не может быть удовлетворена частью 2 и частью 3. Это последний шанс удовлетворить зависимость. Кодекс этой части пытается получить зависимость от инжектора модуля приложения или корневого модуля. Этот модуль содержит накладные зависимости: return startview.root.ngmodule.injector.get (depdef.token, notfoundvalue);
Эта часть заканчивает Резиноп поток. Если зависимость не найдена, то угловая не может удовлетворить эту зависимость, и она должна выбрасывать исключение.
Заключение
Иерархический ди является основной особенностью, которую угловые наклоняется намного. Иногда процесс разрешения выглядит сложно и долго. Очень удобно оставлять угловые для управления этим потоком и наслаждаться простотой использования. Теперь, после того, как мы путешествовали на заднем дворе разрешения зависимости компонентов, мы знаем, что ожидать, когда мы его используем.
Вы можете следовать за мной на dormoshe.io или Твиттер Подробнее о угловом, JavaScript и веб-разработке.
Оригинал: “https://www.freecodecamp.org/news/angulars-backyard-the-resolving-of-component-dependencies-2015b40e5bd1/”