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, время: 09:26. |