fromEvent не срабатывает, когда я помещаю HTMLElement, и срабатывает, когда я помещаю Jquery Object - PullRequest
0 голосов
/ 17 июня 2020

Код здесь

Если я поставлю $('input') в качестве параметра fromEvent, он сработает, когда я позвоню $('input').trigger('input'). Но если я поставлю document.getElementsByTagName('input') в качестве параметра, он не сработает. Он будет срабатывать только при вводе, но не срабатывает, когда я звоню $('input').trigger('input'). Может кто-нибудь объяснить, почему?

Примечание: $('input').on('input', _ => console.log) будет работать в обоих случаях.

1 Ответ

0 голосов
/ 17 июня 2020

это потому, что хук ngOnInit выполняется до построения представления, поэтому селектор документа запрашивает до того, как элемент присутствует, но селекторы jquery на самом деле являются асинхронными c, ожидающими готовности документа.

вот как вы это делаете angular способом:

  @ViewChild('inp')
  input
  // use the after view init hook
  ngAfterViewInit() {
    fromEvent(this.input.nativeElement, 'input') // angular way
      .pipe(
        tap(_ => {
          console.log("tap input");
        })
      )
      .subscribe(_ => {
        console.log("subscribe input");
      });
  }

в вашем html, добавьте это:

<input type="text" #inp>

или еще лучше angular способ ( без использования fromEvent) ...

<input type="text" (input)="showMe($event)">

, тогда в компоненте просто укажите это:

showMe(e) {
  console.log(e)
}

https://stackblitz.com/edit/angular-ivy-jfoc7d?file=src%2Fapp%2Fapp.component.html

...