ФорумПрограммированиеJavaScriptAngularJS → DI в Angular

DI в Angular

  • 7ver2009

    Сообщения: 1 Репутация: N Группа: Кто попало

    Spritz Сен. 9, 2018, 9:01 п.п.

    Angular 6.
    Доброго времени суток. Изучая Angular столкнулся с таким случаем:

    [js]
    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);
    }
    }
    [/js]

    Первый log выводит: InjectionToken{...}
    Второй log выводит: #document - то есть ссылку на глобальный объект.

    Если попытатся создать экземпляр класса через new DOCUMENT(), вполне справедливо ругается, что невозможно использовать new с выражением у которого нет конструктора. То-есть DOCUMENT не функция, и не класс, а просто объект записанный в константу.

    Собственно вопрос: что происходит с DOCUMENT в constructor, что он меняет значение? Всегда считал (видимо ошибочно), что при выполнении dependency injection создается экземпляр класса. Но по всем признакам это просто обьект, а не функция конструктор, или класс. Так что же за колдунство там творится?:blink: :blink: :blink:

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

Пожалуйста, авторизуйтесь, чтобы написать комментарий!