Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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, и улыбаемся. Но хочется понимать глубже.
Ответить с цитированием
  #2 (permalink)  
Старый 10.09.2018, 08:53
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Самый лучший способ это полазить в исходном коде.
Цитата:
Всегда считал (видимо ошибочно), что при выполнении dependency injection создается экземпляр класса
Создается, если не может найти в текущем Injector`е или на уровне выше, пока не дойдет до APP_ROOT.
Цитата:
Собственно вопрос: что происходит с DOCUMENT в constructor, что он меняет значение?
Если в общих чертах, то при бутстрапе нашего приложения в браузере, регистрируется некий набор провайдеров, среди которых и есть этот самый DOCUMENT, определенный фабричной функцией, возвращающей ссылку на window.document
Ответить с цитированием
  #3 (permalink)  
Старый 10.09.2018, 19:40
Новичок на форуме
Отправить личное сообщение для 7ver2009 Посмотреть профиль Найти все сообщения от 7ver2009
 
Регистрация: 30.07.2018
Сообщений: 9

Большое спасибо

Ваш ответ породил еще кучку вопросов, но и отлично. Буду разбиратся дальше.

Посоветуйте пожалуйста какие либо ресурсы, или статьи в которых описана механика работы, и устройства Angular. Не рабочие кейсы, а именно подкапотные приблуды.
Ответить с цитированием
  #4 (permalink)  
Старый 11.09.2018, 06:31
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

https://habr.com/post/348818/
https://github.com/angular/angular/issues
+ исходный код

Последний раз редактировалось destus, 11.09.2018 в 08:53.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Angular Universal, серверный рендеринг - нужно ли мне это? yinfo Angular.js 6 29.10.2018 14:17
Вакансия: Опытный разработчик Angular / Anguar 2. Москва. AK76 Работа 0 14.08.2017 11:37
Проблема c расширением (За решение проблемы готов платить) Chrome на angular и ajax hylum Angular.js 0 13.01.2017 14:40
как подружить angular и Laravel schel4ok Angular.js 0 19.06.2016 21:23
Angular task workflow mardoksp Angular.js 0 15.02.2016 21:34