Не уверен, правильно ли я задаю вопрос, но у меня есть служба, которая используется для совместного использования объекта массива между различными компонентами. Однако, когда я отправляю новый объект в службу, что-то обновляет все другие объекты в моем массиве службы.
т.е. ответы первого нажатия = [{questionId: 1, значение: 1}] второе нажатие с ответами {questionId: 1, значение: 3} = [{questionId: 1, значение: 3}, {questionId: 1, значение: 3} ]
Обратите внимание, как значение изменяется, чтобы соответствовать значению только что отправленного объекта ответа.
это мой сервис
export interface Answer {
questionId: number;
value: number;
}
private answers: Answer[] = [];
private _answers: BehaviorSubject<Answer[]> = new BehaviorSubject([]);
public answers$ = this._answers.asObservable();
addAnswer(answer: Answer) {
this.answers.push(answer);
this._answers.next(this.answers);
}
это мой компонент
export class LevelComponent {
subscription: Subscription;
answer: Answer = {questionId: 0, value: 0};
a: Answer[];
constructor(public route: ActivatedRoute, public answerService: AnswerService) {
}
ngOnInit() {
this.subscription = this.answerService.answers$.subscribe(item => this.a = item);
}
ngOnDestroy() {
// prevent memory leak when component is destroyed
this.subscription.unsubscribe();
}
submitAnswer(e){
console.log(e.target.id);
this.answer.questionId = 1;
this.answer.value = e.target.id;
this.answerService.addAnswer(this.answer);
}
По сути, я хочу «поделиться» массивом ответов между несколькими компонентами, но ограниченное понимание BehaviorSubject и подписок вызывает недоумение относительно того, почему после добавления нового элемента в обслуживаемый массив он будет обновлять все другие объекты. Кстати, если я изменю переменную ответа просто на число, значения в массиве не изменятся, когда я отправлю ответ.
Вот Plunker, иллюстрирующий то, что я вижу.