Есть ли какая-то конкретная c цель для отделения drugs
контейнера, и это можно наблюдать? Пожалуйста, проверьте, соответствует ли следующее требование
@Injectable({
providedIn: 'root'
})
export class CardService {
private drugsSource = new BehaviorSubject<Array<Drug>>([]);
private drugs$ = this.drugsSource.asObservable();
constructor() { }
getDrugs(): any {
return this.drugs$;
}
addDrug(newDrug: Drug) {
this.drugsSource.next([...this.drugsSource.getValue(), newDrug]);
}
removeDrug(neo4jId: string) {
this.drugsSource.next(this.drugsSource.getValue().filter((item: Drug) => item.neo4jId !== neo4jId));
}
}
Нет смысла возвращать заметные объекты из метода добавления и удаления, когда есть отдельный метод get. Так что подписывайтесь на него всякий раз, когда вы добавляете или удаляете значения.
Компонент
this._cardService.addDrug(drug);
this._cardService.getDrugs().subscribe(drugs => {
// handle value
});
// similarly for removing
this._cardService.removeDrug('34');
this._cardService.getDrugs().subscribe(drugs => {
// handle value
});
Обновление Для отображения введите HTML, вам нужно написать конвейер.
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'drugsType'
})
export class TypeOfPipe implements PipeTransform {
transform(drugs: any): any {
let result = [];
for (const drug of drugs) {
let obj = {};
for (const key of Object.keys(drug)) {
obj[key] = typeof drug[key];
}
result.push(obj);
}
return result;
}
}
Рабочий пример: Stackblitz