Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将多个控制值更改分组在一起_Javascript_Angular_Typescript_Observable_Mat Autocomplete - Fatal编程技术网

Javascript 将多个控制值更改分组在一起

Javascript 将多个控制值更改分组在一起,javascript,angular,typescript,observable,mat-autocomplete,Javascript,Angular,Typescript,Observable,Mat Autocomplete,自动完成功能,分别为每个表单控件触发筛选函数 有没有一种方法可以将这些陈述分组,而不是像我下面所做的那样,单独使用多个观察值并单独记录下来 this.filteredTypesCodes = this.assetTypeCodeControl.valueChanges .pipe( startWith(''), map(value => value.length >= 2 ? this._filter(value) : [])

自动完成功能,分别为每个表单控件触发筛选函数

有没有一种方法可以将这些陈述分组,而不是像我下面所做的那样,单独使用多个观察值并单独记录下来

this.filteredTypesCodes = this.assetTypeCodeControl.valueChanges
      .pipe(
        startWith(''),
        map(value => value.length >= 2 ? this._filter(value) : [])
      );

    this.filteredSubTypesCodes = this.assetSubTypeCodeControl.valueChanges
      .pipe(
        startWith(''),
        map(value => value.length >= 2 ? this._filter(value) : [])
      );

    this.filteredMakesCodes = this.assetMakeCodeControl.valueChanges
      .pipe(
        startWith(''),
        map(value => value.length >= 2 ? this._filter(value) : [])
      );

如果使用formGroup将所有表单控件组合在一起,则可以侦听此formGroup的值更改。每次此表单组的一个表单控件更改值时,都会触发此操作

在这里检查类似的东西

如果使用formGroup将所有表单控件分组在一起,则可以侦听此formGroup的值更改。每次此表单组的一个表单控件更改值时,都会触发此操作

在这里检查类似的东西

您可以使用Rxjs的
merge
将多个观察值合并为一个,但我认为这对您不起作用,因为您需要每个观察值分别,您可以做的是,停止重复您自己,您可以将重复的代码放在单独的函数中,如下所示:

createFilter(formControl) {
      return formControl.valueChanges
      .pipe(
        startWith(''),
        map(value => value.length >= 2 ? this._filter(value) : [])
      );
}
然后,您可以使用它创建过滤器:

this.filteredTypesCodes = this.createFilter(this.assetTypeCodeControl)
this.filteredSubTypesCodes = this.createFilter(this.assetSubTypeCodeControl)
this.filteredMakesCodes = this.createFilter(this.assetMakeCodeControl)

您可以从Rxjs中使用
merge
将多个观察值合并为一个,但我认为这对您不起作用,因为您需要每个观察值分别,您可以做的是,停止重复您自己,您可以将重复的代码放在单独的函数中,如下所示:

createFilter(formControl) {
      return formControl.valueChanges
      .pipe(
        startWith(''),
        map(value => value.length >= 2 ? this._filter(value) : [])
      );
}
然后,您可以使用它创建过滤器:

this.filteredTypesCodes = this.createFilter(this.assetTypeCodeControl)
this.filteredSubTypesCodes = this.createFilter(this.assetSubTypeCodeControl)
this.filteredMakesCodes = this.createFilter(this.assetMakeCodeControl)