DI в Angular
Angular 6.
Доброго времени суток. Изучая Angular столкнулся с таким случаем: import { Component, Inject, OnInit } from '@angular/core'; import { DOCUMENT } from '@angular/common'; @Component({ selector: 'app-root', template: "<div>Test</div>" }) export class AppComponent implements OnInit { x = DOCUMENT; constructor(@Inject(DOCUMENT) private y){ } ngOnInit(){ console.log(this.x); console.log(this.y); } } Первый log выводит: InjectionToken{...} Второй log выводит: #document - то есть ссылку на глобальный объект. Если попытатся создать экземпляр класса через new DOCUMENT(), вполне справедливо ругается, что невозможно использовать new с выражением у которого нет конструктора. То-есть DOCUMENT не функция, и не класс, а просто объект записанный в константу. Собственно вопрос: что происходит с DOCUMENT в constructor, что он меняет значение? Всегда считал (видимо ошибочно), что при выполнении dependency injection создается экземпляр класса. Но по всем признакам это просто обьект, а не функция конструктор, или класс. Так что же за колдунство там творится?:blink: :blink: :blink: Интересует именно внутренняя механика Angular, я прекрасно знаю, что в работе просто используем DI, и улыбаемся. Но хочется понимать глубже.;) |
Самый лучший способ это полазить в исходном коде.
Цитата:
Цитата:
|
Большое спасибо:)
Ваш ответ породил еще кучку вопросов, но и отлично. Буду разбиратся дальше. Посоветуйте пожалуйста какие либо ресурсы, или статьи в которых описана механика работы, и устройства Angular. Не рабочие кейсы, а именно подкапотные приблуды. |
|
Часовой пояс GMT +3, время: 07:58. |