У меня небольшая проблема, подписываюсь на наблюдаемый 2 раза. Вовремя у меня есть правильный результат, но с моей второй подпиской я всегда получаю тот же результат. Вот мой код:
import { Injectable } from '@angular/core';
import { BehaviorSubject, Subject, merge, EMPTY, combineLatest, Observable, of } from 'rxjs';
import { scan, map, catchError, tap } from 'rxjs/operators';
import { boatsList } from 'src/app/shared/mocks/boats.mock';
import { CatamaranModel } from 'src/app/shared/models/catamaran.model';
import { SailBoatModel } from 'src/app/shared/models/sail-boat.model';
@Injectable({
providedIn: 'root'
})
export class BoatListService {
private boatListInitSubject: BehaviorSubject<(CatamaranModel|SailBoatModel)[]> = new BehaviorSubject(boatsList);
boatListInit$ = this.boatListInitSubject.asObservable();
private addedBoatSubject: Subject<(CatamaranModel|SailBoatModel)> = new Subject();
addedBoat$ = this.addedBoatSubject.asObservable();
boatList$: Observable<(CatamaranModel|SailBoatModel)[]> = merge(
this.boatListInit$,
this.addedBoat$
)
.pipe(
scan((acc: (CatamaranModel|SailBoatModel)[], value: CatamaranModel|SailBoatModel) => [...acc, value]),
);
constructor() {
this.addedBoat$.subscribe(data => console.log('DATA', data));
this.boatList$.subscribe(data => console.log('DATA AFTER ADD', data));
}
addBoat(boat: CatamaranModel | SailBoatModel){
this.addedBoatSubject.next(boat);
}
}
В этом коде this.boatlist $ .subscribe дает мне 5 объектов в моем массиве, и это хорошо.
addBoat вызывается следующим образом:
onSubmit(){
if (this.addBoatForm.valid){
this.boatListService.addBoat(
new CatamaranModel(150, 150, 564, 15, false)
);
this.router.navigate(['/']);
console.log('BATEAU AJOUTE');
}
}
Но в этом коде:
constructor(
private boatListService: BoatListService
) {
}
ngOnInit(): void {
this.boatListService.boatList$.subscribe((data) => console.log('IN THE ADD COMPONENT', data));
}
Подписка запускается, когда это необходимо, но всегда отправляет мне старое значение (значение, используемое для инициализации).
Я не понимаю, почему у меня есть два данных для одного и того же наблюдаемого.
Если у кого-то есть идея ...