7ver2009

Статус
  • Активный

Последние сообщения 7ver2009

  • AngularJSDI в Angular • 9 сентября 2018 г. 14: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 i...

    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, и улыбаемся. Но хочется понимать глубже.;)