I have many conditions to show the same template. For example:
JavaScript
x
28
28
1
<template [ngIf]="item.url.indexOf('http') == -1">
2
<a class="ripple-effect" [routerLink]="[item.url]" *ngIf="isUserLoggedIn == true" >
3
<span class="media-body media-middle" *ngIf="isUserLoggedIn == true">{{item.name}}</span>
4
</a>
5
<p>Hello, World!</p>
6
</template>
7
8
<template [ngIf]="item.url.indexOf('http') == 0">
9
<a class="ripple-effect" [routerLink]="[item.url]" *ngIf="isUserLoggedIn == true" >
10
<span class="media-body media-middle" *ngIf="isUserLoggedIn == true">{{item.name}}</span>
11
</a>
12
<p>Hello, World!</p>
13
</template>
14
15
<template [ngIf]="item.url.indexOf('http') == 1">
16
<a class="ripple-effect" [routerLink]="[item.url]" *ngIf="isUserLoggedIn == true" >
17
<span class="media-body media-middle" *ngIf="isUserLoggedIn == true">{{item.name}}</span>
18
</a>
19
<p>Hello, World!</p>
20
</template>
21
22
<template [ngIf]="item.url.indexOf('http') == 2">
23
<a class="ripple-effect" [routerLink]="[item.url]" *ngIf="isUserLoggedIn == true" >
24
<span class="media-body media-middle" *ngIf="isUserLoggedIn == true">{{item.name}}</span>
25
</a>
26
<p>Hello, World!</p>
27
</template>
28
Is it possible to take this html elements:
JavaScript
1
7
1
<a class="ripple-effect" [routerLink]="[item.url]" *ngIf="isUserLoggedIn == true" >
2
<span class="media-body media-middle" *ngIf="isUserLoggedIn == true">
3
{{item.name}}
4
</span>
5
</a>
6
<p>Hello, World!</p>
7
and put somewhere and then just call this html elements by name/reference in *ngIf
? For example:
JavaScript
1
4
1
<template [ngIf]="item.url.indexOf('http') == 2">
2
<!--reference to the repeatable code-->
3
</template>
4
Advertisement
Answer
Actually ngIf has a ‘cool’ attribute, then
, that you could make use of:
JavaScript
1
16
16
1
<ng-container *ngIf="item.url.indexOf('http') === -1; then myTemplate">
2
</ng-container>
3
4
<ng-container *ngIf="item.url.indexOf('http') === 0; then myTemplate">
5
</ng-container>
6
7
<ng-container *ngIf="item.url.indexOf('http') === 1; then myTemplate">
8
</ng-container>
9
10
<ng-template #myTemplate>
11
<a class="ripple-effect" [routerLink]="[item.url]" *ngIf="isUserLoggedIn == true" >
12
<span class="media-body media-middle">{{item.name}}</span>
13
</a>
14
<p>Hello, World!</p>
15
</ng-template>
16
As <template>
has been deprecated, use <ng-template>
instead or <ng-container>
.
You can remove the second ngIf
in the template as the first is sufficient.