At https://www.learnrxjs.io/recipes/smartcounter.html I found a great example of an numbercounter in Angular 2+, the code looks likes:
@Component({
selector: 'number-tracker',
template: `
<h3> {{ currentNumber }}</h3>
`
})
export class NumberTrackerComponent implements OnDestroy {
@Input()
set end(endRange: number) {
this._counterSub$.next(endRange);
}
public currentNumber = 0;
private _counterSub$ = new Subject();
private _subscription : Subscription;
constructor() {
this._subscription = this._counterSub$
.switchMap(endRange => {
return timer(0, 20)
.mapTo(this.positiveOrNegative(endRange, this.currentNumber))
.startWith(this.currentNumber)
.scan((acc, curr) => acc + curr)
// .delayWhen(i => {
// easing here
// })
.takeWhile(this.takeUntilFunc(endRange, this.currentNumber));
})
.subscribe(val => this.currentNumber = val);
}
private positiveOrNegative(endRange, currentNumber) {
return endRange > currentNumber ? 1 : -1;
}
private takeUntilFunc(endRange, currentNumber) {
return endRange > currentNumber
? val => val <= endRange
: val => val >= endRange;
}
ngOnDestroy() {
this._subscription.unsubscribe();
}
}
Now this works good, but I want to pass a variable currentNumber instead of the this.currentNumber default 0.
Until now I've come so far:
public currentNumber: number;
...
@Input()
set fanCountPrev(startRange: number) {
this.currentNumber = startRange
console.log('startRange: ', this.currentNumber)
}
...
But when a new value arrives, there this.currentNumber is not set to the previous version.
Do you have any tips or example to accomplish this?