Nicht sicher, ob ich die Frage richtig stelle, aber ich habe einen Dienst, der verwendet wird, um ein Array-Objekt zwischen verschiedenen Komponenten zu teilen. Wenn ich jedoch das neue Objekt an den Dienst übergebe, aktualisiert etwas alle anderen Objekte in meinem Dienstarray.Angular2 Observable Aktualisieren private Variable
dh ersten Schub Antworten = [{QuestionID: 1, Wert: 1}] zweiten Push mit {QuestionID: 1, Wert: 3} Antworten = [{QuestionID: 1, Wert: 3}, { questionId: 1, value: 3}]
Beachten Sie, wie der Wert geändert wird, um dem Wert des neu gedrückten Antwortobjekts zu entsprechen.
Das ist mein Service
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);
}
Diese meine Komponente
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);
}
Grundsätzlich ist ich bin auf der Suche zu ‚teilen‘ eine Reihe von Antworten auf mehrere Komponenten, aber begrenztes Verständnis von BehaviorSubject und Abonnements ist verblüfft, warum nach dem Hinzufügen eines neuen Elements zu dem im Dienst befindlichen Array alle anderen Objekte aktualisiert werden. Nebenbei bemerkt: Wenn ich die Antwortvariable so ändere, dass sie nur eine Zahl ist, ändern sich die Werte im Array nicht, wenn ich die Antwort einreiche.
Hier ist eine Plunker, die veranschaulicht, was ich sehe.
Was meinst du * "alle anderen Objekte aktualisieren" *? Könntest du ein [mcve] geben? – jonrsharpe
aktualisiert mit einem Beispiel, wie das Antwortobjekt aktualisiert wird – utd1878
@jonrsharpe hinzugefügt einen Plunder – utd1878