Это демонстрирует, как динамически накапливать сумму:
Компонент
import { Component } from "@angular/core";
import { of, Observable, Subject } from "rxjs";
import { scan, tap } from "rxjs/operators";
@Component({
selector: "my-app",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.css"]
})
export class AppComponent {
amount = new Subject<number>();
amount$ = this.amount.asObservable();
total$ = this.amount$.pipe(
scan((acc, amt) => acc + amt),
tap(console.log)
);
doClick() {
this.amount.next(4);
}
}
HTML
<button (click)="doClick()">Add 4</button>
<p>Result: {{ total$ | async }}</p>
Или, как ранее предлагалось, вы можете использовать BehaviorSubject и начать с 0.
Вы можете найти рабочую версию этого кода здесь:
https://stackblitz.com/edit/angular-adder-deborahk
Также обратите внимание, что вы не должны пытаться изменить поток, используя такой синтаксис:
myStream = myStream.pipe(...);