12
Сен
2021

Angular Injector error.e.getInjector().get() undefined. Куда то исчезает Injector

введите сюда описание изображения

Основной метод открытия окна

public open<T>(type: ComponentRef<any>, modalParams: any = {}): Promise<T> {
    this.preloaderService.showLoader$.next(false);
    this.activeComponent = type.instance.constructor.name;

    if (!SingleModalService.viewContainerRef) {
        return Promise.reject('No view container');
    } else {
        SingleModalService.viewContainerRef.clear(); // закрывает предыдущее модальное окно
    }
    // создаем инстанс модалки
    const container = this.createContainer(SingleModalWindowComponent) as ComponentRef<SingleModalContainer>;
    const injector = Injector.create({
        providers: [{ provide: SingleModalContext, deps: [] }],
        parent: container.instance.container.injector,
    });
    const context = injector.get(SingleModalContext);
    container.instance.context = context;
    // Трейт/обертка для модального окна (расширяет его возможности)
    if (container.instance.hasOwnProperty('params')) {
        container.instance['params'] = modalParams;
    }

    if (container.instance.hasOwnProperty('destroy')) {
        container.instance['destroy'].subscribe(status => {
            this.activeComponent = null;
        });
    }

    // вставляем в модальное окно инстанс встроенного компонента
    container.instance.container.insert(type.hostView);

    return context.promise(container, SingleModalService.viewContainerRef);
}

Вспомогательный метод, который принимает компонент для встраивания и открывает модальное окно

public open<T, D = any>(
    component: Type<T>,
    modalOptions: ModalOptionsInterface = {},
    data?: D
): { close$: Observable<any>; instance: T } {
    const injector =
        data !== undefined
            ? Injector.create({ providers: [{ provide: MODAL_DATA, useValue: data }] })
            : this.injector;
    const modalComponent = this.componentFactoryResolver.resolveComponentFactory(component);
    const componentRef = modalComponent.create(injector);
    const close$ = new Subject();
    this.singleModalService.open(componentRef, this.getModalOptions(modalOptions)).then(() => {
        close$.next();
        close$.complete();
    });

    return {
        close$: close$.asObservable(),
        instance: componentRef.instance,
    };
}

Источник: https://ru.stackoverflow.com/questions/1327770/angular-injector-error-e-getinjector-get-undefined-%D0%9A%D1%83%D0%B4%D0%B0-%D1%82%D0%BE-%D0%B8%D1%81%D1%87%D0%B5%D0%B7%D0%B0%D0%B5%D1%82-injecto

Тебе может это понравится...

Добавить комментарий