Динамически изменить частоту интервала Angular - PullRequest
0 голосов
/ 10 апреля 2020

В конструкторе у меня есть функция:

const inter= interval(1000);
inter.subscribe(val => {this.function()});

Моя функция вызывается каждые 1 се c по умолчанию. У меня есть поле ввода, где пользователь может передать новый интервал времени. Как изменить частоту звонка this.function() на частоту, полученную со входа?

Ответы [ 3 ]

2 голосов
/ 10 апреля 2020

использование Subject с:


private intervalSubject = new BehaviorSubject<number>(1000); // default 1000ms interval

private interval$ = this.intervalSubject.pipe(
  switchMap(duration => interval(duration))
);

ngOnInit() {
  this.interval$.subscribe(() => this.func());
}

handleInputChanged(newInputNumber: number) {
  this.intervalSubject.next(newInputNumber); // make sure the input is of type number, not string
}

func() {
  console.log('called!');
}

1 голос
/ 10 апреля 2020
const frequency$ = new Subject();
const inter = frequency$
  .pipe(
    switchMap(freq => interval(freq)),
  )

В конце концов, вы можете использовать BehaviorSubject() со значением по умолчанию. Для установки новой частоты вы можете использовать frequency$.next(1000).

0 голосов
/ 10 апреля 2020

Вот вам справка:

https://angular-cvrsan.stackblitz.io

switchMap, чтобы отменить ваш предыдущий интервал источника

...