Используя rxjs 6+, вы должны импортировать операторы из 'rxjs/operators'
и функции Observable из 'rxjs'
, как сказано в этом руководстве по обновлению , а операторы теперь используются с pipe()
, как сказано здесь .
Это должно сделать это:
import { interval } from 'rxjs';
import { takeWhile, map } from 'rxjs/operators';
const userValueSeconds = 3;
interval(100).pipe( // run every 100ms
takeWhile(i => userValueSeconds - (i/10) >= 0 ), // stop when it gets to the value entered
map(i => i * 100) // map to ms
).subscribe(ms => console.log(ms));
Демо код:
<input type="text" placeholder="Seconds" [formControl]="secondsCtrl">
<button (click)="run(secondsCtrl.value)">Run</button>
<div> TIMER: {{timer$ | async | date : 'mm:ss:SS'}} </div>
import { Component, OnInit } from '@angular/core';
import { Observable, interval } from 'rxjs';
import { takeWhile, map } from 'rxjs/operators';
import { FormControl } from '@angular/forms';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent implements OnInit {
secondsCtrl: FormControl;
timer$: Observable<number>;
ngOnInit(){
this.secondsCtrl = new FormControl(3);
}
run(seconds: number) {
this.timer$ = interval(100).pipe(
takeWhile(i => seconds - (i/10) >= 0 ),
map(i => i * 100)
);
}
}