1
- import { AsyncPipe , NgFor , NgIf } from '@angular/common' ;
2
- import { Component , Input , inject } from '@angular/core' ;
1
+ import { AsyncPipe , NgFor } from '@angular/common' ;
2
+ import { Component , inject , Input , Pipe , PipeTransform } from '@angular/core' ;
3
3
import { RouterLink , RouterLinkActive } from '@angular/router' ;
4
4
import { FakeServiceService } from './fake.service' ;
5
5
@@ -36,18 +36,27 @@ export class NavigationComponent {
36
36
@Input ( ) menus ! : MenuItem [ ] ;
37
37
}
38
38
39
+ // other way would be to use trackby
40
+ @Pipe ( { name : 'memo' } )
41
+ export class MemoPipe implements PipeTransform {
42
+ transform ( prop : string ) : MenuItem [ ] {
43
+ return [
44
+ { path : '/foo' , name : `Foo ${ prop } ` } ,
45
+ { path : '/bar' , name : `Bar ${ prop } ` } ,
46
+ ] ;
47
+ }
48
+ }
49
+
39
50
@Component ( {
40
- imports : [ NavigationComponent , NgIf , AsyncPipe ] ,
51
+ imports : [ NavigationComponent , AsyncPipe , MemoPipe ] ,
41
52
template : `
42
- <ng-container *ngIf="info$ | async as info">
43
- <ng-container *ngIf="info !== null; else noInfo">
44
- <app-nav [menus]="getMenu(info)" />
45
- </ng-container>
46
- </ng-container>
47
-
48
- <ng-template #noInfo>
49
- <app-nav [menus]="getMenu('')" />
50
- </ng-template>
53
+ @if (info$ | async; as info) {
54
+ @if (info !== null) {
55
+ <app-nav [menus]="info | memo"></app-nav>
56
+ } @else {
57
+ <app-nav [menus]="'' | memo"></app-nav>
58
+ }
59
+ }
51
60
` ,
52
61
host : { } ,
53
62
} )
@@ -56,10 +65,10 @@ export class MainNavigationComponent {
56
65
57
66
readonly info$ = this . fakeBackend . getInfoFromBackend ( ) ;
58
67
59
- getMenu ( prop : string ) {
60
- return [
61
- { path : '/foo' , name : `Foo ${ prop } ` } ,
62
- { path : '/bar' , name : `Bar ${ prop } ` } ,
63
- ] ;
64
- }
68
+ // getMenu(prop: string) {
69
+ // return [
70
+ // { path: '/foo', name: `Foo ${prop}` },
71
+ // { path: '/bar', name: `Bar ${prop}` },
72
+ // ];
73
+ // }
65
74
}
0 commit comments