это

ользую ngTemplateOutlet с динамическим значением.

<ng-container *ngFor="let part of objectKeys(config);">
    <ng-container *ngIf="config[part]">
        <ng-container [ngTemplateOutlet]="part"></ng-container>
    </ng-container>
</ng-container>

<ng-template #one></ng-template>
<ng-template #two></ng-template>
гдеconfig это объектгдеconfig[part] является логическимгдеpart это ключ объекта и значение, переданное ngTemplateOutlet.

Я всегда получаю ошибку:

ERROR TypeError: templateRef.createEmbeddedView is not a function

Я следовал:https://stackoverflow.com/a/41241329/5627096

Но, может быть, я не могу сделать что-то подобное.

На самом деле, объект конфигурации содержит логическое значение, как я уже сказал, и определяет часть формы для отображения.

Это действительно большая форма и для лучшего чтения, я ищу решение, чтобы разделить ее.

ОБНОВИТЬ

объект конфигурации выглядит так:

config = {
    one: true,
    two: false
}

Так что в моей форме только<ng-template #one></ng-template> отображается. Если я поверну два к истине, оба отображаются.

Я не знаю, лучший ли это подход. Я могу использовать * ngIf, но с этим решением у меня действительно нечитаемый большой код.

Ответы на вопрос(1)

Решение Вопроса

Добавьте их в класс компонентов

@ViewChild('one') one:TemplateRef<any>;
@ViewChild('two') two:TemplateRef<any>;

и получить ссылки на шаблоны, используя

<form no-validate (ngSubmit)="onSubmit(search)">
    <ng-container *ngFor="let part of objectKeys(config);">
        <ng-container *ngIf="config[part]">
            <ng-container [ngTemplateOutlet]="this[part]"></ng-container>
        </ng-container>
    </ng-container>
</form>

Пример StackBlitz

 galki11 янв. 2019 г., 01:37
@ Том этоthis класса компонента, как вthis.one гдеone это@ViewChild('one') one:TemplateRef<any>
 Günter Zöchbauer01 окт. 2017 г., 17:53
 Swarovski01 окт. 2017 г., 18:12
:) Спасибо, Гюнтер, я обновил твой пост, чтобы он работал так, как я хочу. Вот последний рабочий код:stackblitz.com/edit/angular-2txidk?file=app%2Fapp.component.css
 Sampgun05 сент. 2018 г., 15:12
Зрелищный. Я смог решить мою проблему !!dynamic-template-outlet.stackblitz.io
 Swarovski01 окт. 2017 г., 17:09
Спасибо, но ngOutletContext используется для передачи данных внутри <ng-template>, верно? Мне нужна ссылка на <ng-template>. Я имею в виду, еслиpart = one так что<ng-template #one></ng-template> отображается.

Ваш ответ на вопрос