在键入时获取Angular 4中输入字段的值

时间:2018-01-01 15:45:01

标签: html angular typescript

我有一个输入字段,用户可以在我的应用中搜索不同的用户。但我想以这样的方式进行搜索:当用户输入输入时,它应该同时搜索。 我实现了我的功能调用我的后端,但我只想知道如何在每次按键时发送输入字段的值。 请帮忙

3 个答案:

答案 0 :(得分:4)

您应该处理ngModelChange Angular事件(请参阅 this stackblitz )。它考虑了输入字段中的任何类型的更改(键击,使用上下文菜单剪切/粘贴等),并忽略不会导致实际更改的键击(例如,按下并释放 Shift 本身不会触发ngModelChange)。

<input [ngModel]="searchStr" (ngModelChange)="modelChange($event)" />
import { Component } from "@angular/core";
import { FormsModule } from "@angular/forms";

@Component({
})
export class AppComponent {
  public searchStr: string = "";

  public modelChange(str: string): void {
    this.searchStr = str;
    // Add code for searching here
  }
}

答案 1 :(得分:3)

在您的输入上使用 (keyup) 事件并将ngModel值传递给您的服务

<input   #term (keyup)="search(term.value)" type="text" class="form-control search-text-indent  searchbar-positioning" >

并在component.ts中

search(term: string): void {
   //pass it to your service     
}

答案 2 :(得分:0)

我会使用表单控件来公开<input [formControl]="search"> 可观察对象。每次表单控件的值发生更改时,都会发出此可观察对象。

// component.ts
ngOnInit(){
    this.search.valueChanges
        .pipe(
            // debounce input for 400 milliseconds
            debounceTime(400),
            // only emit if emission is different from previous emission
            distinctUntilChanged(),
            // switch map api call. This will cause previous api call to be ignored if it is still running when new emission comes along
            switchMap(res => this.getSearchData(res))
        )
        .subscribe(res => {
            this.result = res;
        })
}

这允许您控制先行搜索的流程

{{1}}

通过这个,您可以控制调用api调用的频率(debounceTime&amp; distinctUntilChanged)并确保api调用完成的顺序(switchMap)。这是一个stack blitz演示。