Я хотел бы знать, что является лучшим способом избежать использования нескольких шаблонов * ngIf в шаблоне. Например, в шаблоне компонента, зависит от маршрута, я должен генерировать множество различных элементов, таких как, что:Как избежать множественного ngIf в шаблоне Angular
<div *ngIf="route == 'page1'">Title for page 1</div>
<div *ngIf="route == 'page2'">Title for page 2</div>
<i *ngIf="route == 'page1'" class="fa fa-message"></i>
<i *ngIf="route == 'page2'" class="fa fa-bell-o"></i>
<div *ngIf="route == 'page1'">
<button>...</button>
</div>
<div *ngIf="route == 'page2'">
<div class="menu"></div>
</div>
Это будет стать грязным в ближайшее время, так что я придумал решение, в файле этого компонента ерей , я определил массив:
arr_1 = [
{ type: "text", content: "Title for page 1" },
{ type: "icon", class: "fa fa-message" },
{ type: "button", content: "..." }
]
arr_2 = [
{ type: "text", content: "Title for page 2" },
{ type: "icon", class: "fa fa-bell-o" },
{ type: "menu", menu_children: [...], class: "menu" }
]
В своем шаблоне:
<div *ngIf="route == 'page1'">
<generator *ngFor="let ele of arr_1"
[type]="ele.type"
[class]="ele.class"
[content]="ele.content"
[menu_children]="ele.menu_children"
>
</generator>
</div>
<div *ngIf="route == 'page2'">
<generator *ngFor="let ele of arr_2"
[type]="ele.type"
[class]="ele.class"
[content]="ele.content"
[menu_children]="ele.menu_children"
>
</generator>
</div>
и я создал GeneratorComponent, который принимает тип и генерировать соответствующий элемент:
@Component({
selector: 'generator',
...
})
export class GeneratorComponent {
@Input() type: string;
@Input() content: string;
@Input() class: string;
@Input() menu_children: string;
}
шаблон GeneratorComponent в:
<div *ngIf="type == 'text'">{{ content }}</div>
<i *ngIf="type == 'text'">{{ content }}</i>
...
Проблема здесь класс GeneratorComponent будет иметь несколько свойств, и они не используются по одной причине (например, содержание и menu_children не имеют никакого отношения).
У вас есть идея исправить мое решение? Другие решения будут оценены.
Спасибо!
ngSwitch возможно? – Ajey
У меня нет проблемы с 'GeneratorComponent' –