在反应性表格上预先输入 - 预先输入并不显示

时间:2018-06-13 14:58:57

标签: angular rxjs observable angular-reactive-forms ngx-bootstrap

由于关于反应形式的预先输入的文档非常“有限”,我无法判断这是一个错误还是问题就在电脑前面。^^ 问题: 我希望每次表单更改时都进行异步http调用。到目前为止,这种情况发生了,每当我的表单更新时,我每次都会得到一个新的结果(这是我想要的)。但是没有出现带阵列的预先输入。

<input type="text"
               class="form-control"
               required minlength="3"
               name="name"
               placeholder="Search for people..."
               formControlName="name"
               [(ngModel)]="name"
               typeaheadOptionField="name"
               [typeaheadOptionsInScrollableView]="2"
               [typeahead]="dataSource | async"
               [typeaheadOptionsLimit]="100"
               [typeaheadScrollable]="true"
               [typeaheadAsync]="true"
               (typeaheadLoading)="changeTypeaheadLoading($event)">

组件:

   this.dataSource = this.form.valueChanges.pipe(
      debounceTime(500),
      switchMap((form) => {
        return this.service.getstats(form).map((result:someTypedArr[]) => {
           return result;
        });
      })
    );
  }

注意:我在Observable绑定中有异步管道 - 这意味着 - 我在html模板中订阅了它。

1 个答案:

答案 0 :(得分:0)

经过一些试验和错误后,我想出了如何在typeAhead中显示结果我创建了一个EventEmitter属性:

$('#searchform').on('submit', function(e) {
  e.preventDefault();

  $.ajax({
    type: this.method,
    url: this.action,
    data: $(this).serialize(),
    success: function(response) {
      $('#reload').html();
    }
  });
});

并发出订阅结果:

public clanEmitter: EventEmitter<ClansByClantagType[]> = new EventEmitter<ClansByClantagType[]>();

eventEmitter包含在html中,如下所示:

this.form.valueChanges.pipe(
  debounceTime(500),
  switchMap((form) => {
    return this.service.getstats(form).map((result:someTypedArr[]) => {
       return result;
    });
  })
).subscribe(result => {
  this.clanEmitter.emit(result);
});

虽然我现在已经解决了,如果有人能告诉我为什么这实际上有效,那会很酷^^