@@ -81,21 +81,30 @@ size$.next('small');
81
81
82
82
``` ts
83
83
import { Component } from ' @angular/core' ;
84
- import { AngularFirestore , AngularFirestoreCollection } from ' angularfire2/firestore' ;
84
+ import { AngularFirestore } from ' angularfire2/firestore' ;
85
85
import { Observable } from ' rxjs/Observable' ;
86
86
import { BehaviorSubject } from ' rxjs/BehaviorSubject' ;
87
- import { Subscription } from ' rxjs/Subscription' ;
88
87
import ' rxjs/add/operator/switchMap' ;
89
88
import ' rxjs/add/observable/combineLatest' ;
90
89
90
+ export interface Item {
91
+ text: string ;
92
+ color: string ;
93
+ size: string ;
94
+ }
95
+
91
96
@Component ({
92
97
selector: ' app-root' ,
93
98
template: `
94
- <ul>
95
- <li *ngFor="let item of items | async">
96
- {{ item.text }}
97
- </li>
98
- </ul>
99
+ <div *ngIf="items$ | async; let items; else loading">
100
+ <ul>
101
+ <li *ngFor="let item of items">
102
+ {{ item.text }}
103
+ </li>
104
+ </ul>
105
+ <div *ngIf="items.length === 0">No results, try clearing filters</div>
106
+ </div>
107
+ <ng-template #loading>Loading…</ng-template>
99
108
<div>
100
109
<h4>Filter by size</h4>
101
110
<button (click)="filterBySize('small')">Small</button>
@@ -117,15 +126,14 @@ import 'rxjs/add/observable/combineLatest';
117
126
` ,
118
127
})
119
128
export class AppComponent {
120
- items: Observable <AngularFireAction < firebase . firestore . DataSnapshot > []>;
129
+ items$ : Observable <Item []>;
121
130
sizeFilter$: BehaviorSubject <string | null >;
122
131
colorFilter$: BehaviorSubject <string | null >;
123
- filter$: Observable <[string , string ]>;
124
132
125
133
constructor (afs : AngularFirestore ) {
126
134
this .sizeFilter$ = new BehaviorSubject (null );
127
135
this .colorFilter$ = new BehaviorSubject (null );
128
- this .items = Observable .combineLatest (
136
+ this .items$ = Observable .combineLatest (
129
137
this .sizeFilter$ ,
130
138
this .colorFilter$
131
139
).switchMap (([size , color ]) =>
0 commit comments