I am new to angular 8 and RxJs operators.

//state-management.component.ts @Component({ selector: 
'app-state-management', templateUrl: './state-management.component.html' }) 
export class StateManagementComponent implements OnInit { stateManagement$ 
= this.dataservice.stateManagement$; constructor(private dataservice: 
StateManagementService) { } ngOnInit(): void { } } 
//state-management.service.ts @Injectable({ providedIn: 'root' }) export 
class StateManagementService { // tslint:disable-next-line:variable-name 
_state = { loading: 'Test loading', translationGroups: ['english', 'French'], 
}; private store = new BehaviorSubject<any>(this._state); private state$ = 
this.store.asObservable(); translationGroups$ = this.state$.pipe( tap(res => 
console.log('translationGroups$', res)), map(x => x.translationGroups || 
[]), distinctUntilChanged() ); loading$ = this.state$.pipe( tap(res => 
console.log('loading$', res)), map(x => x.loading || ''), 
distinctUntilChanged() ); allEmplyees$ = this.http.get<IEmployees[]>(
'../assets/employees') .pipe( tap(res => console.log('allEmplyees$', res)), 
map((res) => res.map((data) => { return { id: data.id, name: 'Hello ' + 
data.name, email: data.email, gender: data.gender, productid: 
data.productid, productName: '', } as IEmployees; }) ) ); allProducts$ = 
this.http.get<IProducts[]>('../assets/products').pipe( tap(ev => console
.log('allProducts$', ev)) ); stateManagement$ = combineLatest([ 
this.allEmplyees$, 
this.allProducts$, this.loading$, this.translationGroups$ ]).pipe( tap(res 
=> console.log('stateManagement$', res)), map(([allEmplyees, allProducts, 
loading, translationGroups]) => ({ allEmplyees, allProducts, loading, 
translationGroups })) ); constructor(private http: HttpClient) { } private 
updateState(state: any) { this.store.next((this._state = state)); console
.log('updateState', this._state); } public changeLoading(text: string) { 
this.updateState({ ...this._state, loading: text }); } }


//HTML

<ng-container *ngIf="(stateManagement$ | async) || {} as vm"> <p>vm All 
Emplyees!</p> <ul> <li *ngFor="let employee of vm.allEmplyees"> {{ 
employee.name }} -- {{ employee.email }} </li> </ul> <div>vm loading = 
{{vm.loading}}<br /><br /></div> <div>vm translationGroups</div> <ul> <li *
ngFor="let translationGroup of vm.translationGroups"> {{ translationGroup 
}} </li> </ul> <p>vm All Products!</p> <ul> <li *ngFor="let product of 
vm.allProducts"> {{ product.name }} -- {{ product.desc }} </li> </ul> <
button (click)="changeLoading();">Change Loading</button> </ng-container>

I need to understand why combineLatest executed in my example here when 
none of my observables in combineLatest emitted any value. I can see 
stateManagement$ executed in console.

I know combineLatest *will not emit an initial value until each observable 
emits at least one value but how come combineLatest executed in my example 
here.*

-- 
You received this message because you are subscribed to the Google Groups 
"Angular and AngularJS discussion" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to angular+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/angular/9c178a8f-39d6-4c56-9cf6-1b099bca67ddn%40googlegroups.com.

Reply via email to