Как внедрить службу в динамический компонент с помощью Angular2

У меня есть компонент, который динамически загружает другой компонент с помощью DynamicComponentLoader. Однако для динамического компонента необходимо внедрить службу. Однако я не уверен, как это сделать. Из документов Angular.io я вижу, что DynamicComponentLoader принимает массив ResolvedProvider.

Я пытался получить провайдера, выполнив:

var provider = provide(ManagerService, {useExisting: ManagerService});
dcl.loadIntoLocation(this.data.template, this.er, "content",[provider]);

Это не работает. Вы можете увидеть пример на plunker.

В примере с plunker вы можете видеть, что компонент Info загружается (поскольку ему не требуется служба), но компонент Alternate не загружается.

Я немного сбит с толку, потому что служба внедряется в корневой компонент, поэтому я думал, что она будет автоматически внедряться в каждый дочерний компонент, когда это потребуется.

Как мне внедрить эту услугу?


person RHarris    schedule 08.04.2016    source источник


Ответы (1)


Он не должен отличаться от обычного DI

this.dynamicComponentLoader.loadIntoLocation(MyComponent, this.elementRef, "content")


class MyComponent{
  constructor(someService:SomeService){}//injected here when instantiated
}

Если ваш динамически загружаемый компонент вводит службы в конструктор, он работает как обычный DI.

Однако убедитесь, что служба зарегистрирована в каком-либо массиве поставщиков. Либо на уровне компонента, либо выше в цепочке (родительский или загрузочный)

person TGH    schedule 08.04.2016
comment
Это то, о чем я думал. Вы посмотрели на пример plunker. Как видите, он явно не вводится, и, насколько я вижу, я все настроил правильно. - person RHarris; 08.04.2016