Home > Net >  Angular combinelatest using subject without initial value
Angular combinelatest using subject without initial value

Time:05-14

I am using Angular RXJS, I have multiple Behavior Subjects, My problem is: I want the posts$ stream to emit initially without setting a value for the category filter when loading the page, but I don't want to set a default value for the CategorySubject!, I tried NULL its no working and If I change it to Subject;combinelatest will not work initially, how can I achieve this?

Thanks in advance.

  private CategorySubject = new BehaviorSubject<number>();
  //CategorySubject = new Subject<number>();
  //CategorySubject = new BehaviorSubject<number>(null);
  public CategoryAction$ = this.CategorySubject.asObservable();

  //pageIndex Subject
  private pageIndexSubject = new BehaviorSubject<number>(1);
  public pageIndexAction$ = this.pageIndexSubject.asObservable();

  //Search/filter Subject
  private searchSubject = new BehaviorSubject<string>('');
  public searchAction$ = this.searchSubject.asObservable();

 Posts$ = combineLatest([
    this.pageIndexAction$,
    this.searchAction$
    this.CategoryAction$
  ]).pipe()

CodePudding user response:

When you have strictNullChecks enabled, you could either specify your BehaviorSubject's type as BehaviorSubject<number|null> or you could use a plain Subject<number> and use startWith to emit your initial null value inside the combineLatest:

 private CategoryAction$ = new Subject<number>();
 
 ...
 
 Posts$ = combineLatest([
    this.pageIndexAction$,
    this.searchAction$
    this.CategoryAction$.pipe(startWith(null))
  ]).pipe()
  • Related