Я испытываю странное поведение с BehaviorSubject в моем приложении angular (7).
Я создал службу, которая потребляет некоторые остальные вызовы.Чтобы представить, что происходит в коде, вот вы:
export class MyService {
private dataFromServer = new BehaviorSubject<IDataFromServer[]>(null);
constructor(private http: HttpClient) { }
getAll(): Observable<IDataFromServer[]> {
this.http.get<IDataFromServer[]>('/api/rest')
.pipe(
tap(data => this.dataFromServer.next(data))
);
}
return this.dataFromServer.asObservable();
}
Пока все хорошо.Когда мне нужно использовать этот сервис, я подписываюсь на метод getAll (), например
this.myService.getAll().subscribe(console.log);
, и печатаю данные в консоль.
Теперь мне нужно добавить данные из внешнего интерфейса востальные API
export class MyService {
private dataFromServer = new BehaviorSubject<IDataFromServer[]>(null);
// snip...
add(item: IDataFromServer): Observable<any> {
return this.http.post<IDataFromServer>('/api/manage', item).pipe(
tap(data => {
let internal = this.dataFromServer.getValue();
if (!internal) {
internal = new Array<IDataFromServer>();
}
internal.push(material);
this.dataFromServer.next(internal);
})
);
}
}
Вот где начинается проблема.Подписка выше печатает в первый раз, но не получает новые данные, сгенерированные из next ().
Меня удивляет то, что если я нажму кнопку «Обновить» в браузере, не меняя строку кода, подпискавозвращаться к жизни каждый раз, когда я нажимаю следующий ().
Я, очевидно, что-то делаю не так, но я не понимаю, почему и где.
Спасибо за любую вашу помощь.