Тема: DI в Angular
Показать сообщение отдельно
  #1 (permalink)  
Старый 09.09.2018, 18:18
Новичок на форуме
Отправить личное сообщение для 7ver2009 Посмотреть профиль Найти все сообщения от 7ver2009
 
Регистрация: 30.07.2018
Сообщений: 9

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 создается экземпляр класса. Но по всем признакам это просто обьект, а не функция конструктор, или класс. Так что же за колдунство там творится?

Интересует именно внутренняя механика Angular, я прекрасно знаю, что в работе просто используем DI, и улыбаемся. Но хочется понимать глубже.
Ответить с цитированием