如何订阅反应式FormGroup并映射值更改(角度6)

时间:2018-07-22 15:51:48

标签: angular rxjs observable angular6

我在angular 6中有一个简单的表单,只有一个文本字段和一个下拉列表。我想要的是观察该表格并检查该表格中的所有更改。因此,无论是在文本字段中键入字母还是在下拉列表中进行更改,我都想调用一个函数。

表单组是这样的

  nameForm = this.formBuilder.group({
    name:['',Validators.required],
    cepDrop:['construction']
  });

我的逻辑是

每次表单值更改时,请稍等一会,直到没有其他更改为止,抓住表单对象,将其包含内容映射到函数中,然后订阅该函数的结果。

  ngOnInit() {
    this.nameForm.valueChanges
    //.debounceTime(400)
    //.distinctUntilChanged()
    .map( terms => this.mapcmsService.searchName(terms.name, terms.cepDrop))
    .subscribe( value => console.log(value));
  }

首先debounceTimedistinctUntilChanged给出错误Property 'debounceTime' does not exist on type 'Observable<any>'.

主要问题是map也给出相同的错误。 Property 'map' does not exist on type 'Observable<any>'.

该怎么办,所以我可以解决此问题?如何观察整个表单组并将其值映射到函数?

谢谢

1 个答案:

答案 0 :(得分:2)

那是做rxjs的旧方法。现在,您应该像这样将额外的运算符传递给pipe运算符:

import { debounceTime, distinctUntilChanged, map } from 'rxjs/operators';

...

this.nameForm.valueChanges.pipe(
    debounceTime(400),
    distinctUntilChanged(),
    map(terms => this.mapcmsService.searchName(terms.name, terms.cepDrop))
).subscribe( value => console.log(value));