Anguler2 - Unhandled Promise rejection: Нет провайдера для ViewContainerRef! (В динамическом шаблоне)

Я пытаюсь реализовать динамический компонент. Мое требование: у меня есть три класса - LayoutComponent, MenuService и DynamicService. LayoutComponent используется для вызова метода MenuService для выполнения некоторой базовой операции после выполнения операции, метод MenuService снова вызывает метод DynamicService для создания динамического компонента.

Вот мой Plunker со следующей ошибкой, которую он дает

Unhandled Promise rejection: No provider for ViewContainerRef! ;

Ответ 1

ViewContainerRef может быть введен только компонентам или директивам, но не службам.

Компоненты и директивы получают ViewContainerRef элемента, к которому они присоединены. Служба не привязана ни к какому виду.

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

Ответ 2

В моем случае я использовал ng2-toastr и это вызвало проблему.

Вызов setRootViewContainerRef() из toastr решит вашу проблему.

constructor(dialogService: DialogService,
        private toastr: ToastsManager,
        private vcr: ViewContainerRef) {
        super(dialogService);
        this.toastr.setRootViewContainerRef(vcr);
    }