[英]How to set a value on a filtered Observable
我正在使用 Angular 9。我得到了一个过滤的对象列表。 我想更改返回的 object 上的值。
我有以下代码:
private setFilteredApproverOptions(): void {
for (const field in this.approvalEditFormGroup.controls) {
console.log(field);
this.approvalEditFormGroup.get(field).valueChanges.subscribe(value => {
if (value && typeof value.valueOf() === "string") {
this.filteredApproverOptions = this._filter(value);
this.filteredApproverOptions.forEach(person => {console.log(person)});
}
});
}
}
private _filter(value: string): Observable<Person[]> {
const filterValue: string = value.toLowerCase();
let respApprovalState: Observable<Person[]> = this.getApproverOptions(filterValue);
respApprovalState.subscribe(approverOptions => {
return approverOptions.filter(option => (option.firstName.toLowerCase().includes(filterValue) || option.lastName.toLowerCase().includes(filterValue)));
});
return respApprovalState;
}
private getApproverOptions(searchString: string): Observable<Person[]> {
let companyName: string = this.approvalEdit.companyName;
let respApprovalState: Observable<Person[]> = this.service.getApprovers(companyName, searchString);
respApprovalState.subscribe((approverOptions: Person[]) => {
this.approverOptions = approverOptions as Person[];
return approverOptions;
},
error => {
console.log('Error calling getApprovers service', error);
return null;
});
return respApprovalState;
}
以下行:
this.filteredApproverOptions.forEach(person => {console.log(person)});
有这个 output:
我想将x
和y
值设置为硬编码值(例如1
)。
例如
x: 1, y: 1, personId: 105702...
问题
如何设置上述x
和y
值?
更多信息:
export class Person {
public constructor(init?: Partial<Person>) {
Object.assign(this, init);
}
x: number;
y: number;
personId: number;
firstName: string;
lastName: string;
email: string;
companyName: string;
staffCode: string;
}
你只需要 map 你的 observable 然后你的数组。 映射 observable 的工作方式几乎与使用数组相同。 这里是 go:
const mapped = this.filteredApproverOptions.pipe(map( // obs.pipe(map(...)) is changing each value coming in an observable/subject
pArr => pArr.map(p => ({...p, x: 1, y: 1})) // arr.map(...) is changing each value in an array
));
现在你可以订阅它或任何你想用它做的事情,像这样:
mapped.subscribe(val => console.log(val));
参考:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.