Я использую общий сервис для обмена данными между различными компонентами. Проблема в том, что когда я пытаюсь использовать этот сервис внутри моего компонента и фильтрую некоторые данные, то же самое происходит и с общими данными. Как я могу предотвратить это? Я использовал оператор tap вместо карты при подписке, но он не работает. Еще одно решение, которое я попробовал, это cloneDeep из библиотеки loda sh, которая также не работает.
Shared Service
export class SharedDataService {
private treeReport = new BehaviorSubject<ResultModel>(null);
constructor() { }
updateTreeReport(newReport: ResultModel) {
this.treeReport.next(newReport);
}
getTreeReport() {
return this.treeReport.asObservable();
}
}
Компонент
this.featureDetails$ = this.sharedService.getTreeReport().pipe(map(treeReport) => {
treeReport.features = treeReport.features.filter(item => item._id == id)
return treeReport
}))
Что я пробовал следующим образом
1.
this.featureDetails$ = this.sharedService.getTreeReport().pipe(tap(treeReport) => {
treeReport.features = treeReport.features.filter(item => item._id == id)
return treeReport
}))
2.
this.featureDetails$ = this.sharedService.getTreeReport().pipe(map(treeReport) => {
treeReport.features = cloneDeep(treeReport.features.filter(item => item._id == id))
return treeReport
}))