将多个控件值更改组合在一起
Grouping together multiple control value changes
自动完成功能,分别为每个表单控件触发过滤功能。
有没有一种方法可以对语句进行分组,而不是像我下面那样单独使用多个可观察对象并分别写下来?
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) : [])
);
你有 merge
来自 Rxjs 的合并多个 observables 为一个,但我不认为这对你有用,因为你需要单独的每个 observable,你可以做些什么来停止重复你自己是否可以将重复的代码放在一个单独的函数中,像这样:
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)
自动完成功能,分别为每个表单控件触发过滤功能。
有没有一种方法可以对语句进行分组,而不是像我下面那样单独使用多个可观察对象并分别写下来?
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) : [])
);
你有 merge
来自 Rxjs 的合并多个 observables 为一个,但我不认为这对你有用,因为你需要单独的每个 observable,你可以做些什么来停止重复你自己是否可以将重复的代码放在一个单独的函数中,像这样:
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)