Вызов метода после подписки Angular - PullRequest
0 голосов
/ 13 марта 2019

Я хочу вызвать метод после изменения размера окна, но с задержкой 500 мс. Я сделал это так, и это работает, но вы бы сделали это таким же образом? Я новичок в Angular

resizeEvent$: Subject<MouseEvent> = new Subject<MouseEvent>();

  @HostListener('window:resize', ['$event'])
  onResize(event) {
    this.resizeEvent$.next(event);
  }

  ngOnInit() {

    this.resizeEvent$.debounceTime(300).subscribe( data => this.initJourney());}

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Вы не упомянули версию вашего Angular и RxJS, но я предполагаю, что вы используете RxJS v6 +.

Поэтому вам нужно использовать pipe метод, чтобы использовать debounceTime Первый импорт debounceTime:

import {debounceTime} from 'rxjs/operators';

Тогда:

ngOnInit() {

    this.resizeEvent$
     .pipe(
       debounceTime(300)
     )
    .subscribe( data => this.initJourney());
}

Обновление

Я думаю, вам нужно изменить Subject<MouseEvent> на Subject<Event>.

Обновление 2

Существует другой способ, который не включает debounceTime.Вы можете использовать setTimeout в методе прослушивания событий следующим образом.Обязательно удалите тему и подписку в ngOnInit.

@HostListener('window:resize', ['$event'])
onResize(event) {
    setTimeout(() => {
      this.initJourney();
    },300);
}
0 голосов
/ 13 марта 2019

ок, спасибо за быстрый ответ (я использую угловой 7). Но разве нет другого пути:

.subscribe( data => this.initJourney());

выглядит странно, данные не используются

...