如何使用 map() 运算符为 Observable 列值添加前缀?
How to add prefix to an Observable column value using map() operator?
我有一个从服务方法返回的 Observable 值,我想添加一个前缀,例如'Prof' 作为前缀使用 map()
运算符。
我的 returns Observable 方法是:
list(): Observable<EmployeesDto> {
items: Employees;
...
}
这是我尝试映射数据并分配它的方法:
...
employeeList : EmployeesDto;
this.service.list()
.pipe(
map((list: EmployeesDto) => {
list.items.forEach(m => {
m.Name = 'Dr.' + m.Name
});
this.employeeList = list; // the code does not hit there and cannot set data
})
)
但问题是我无法设置employeeList。那么,这个实现有什么问题?
更新:
最后一步,我使用这种方法进行了测试:
import { Component, OnInit } from "@angular/core";
import { of, Observable } from "rxjs";
import { map } from "rxjs/operators";
@Component({
selector: "my-app",
templateUrl: "./app.component.html"
})
export class AppComponent implements OnInit {
employees$: Observable<any[]>;
employeesDto$: Observable<any[]>;
constructor() {}
ngOnInit(): void {
this.initializeData();
}
initializeData(): void {
// this.employees$ = this.getMockEmployees().pipe(
// map(list => list.map(item => ({ ...item, name: `Dr. ${item.name}` })))
// );
this.employees$ = this.getMockEmployeesDto().pipe(
map(list => list.map(item => ({ ...item, name: `Dr. ${item.name}` })))
)
.subscribe(list => {
console.log(list);
}
)
}
getMockEmployees(): Observable<any[]> {
const employees = [
{
name: "Ariana",
age: 1
},
{
name: "Tom",
age: 2
},
{
name: "Justin",
age: 3
}
];
return of(employees);
}
getMockEmployeesDto(): Observable<any[]> {
const employees$: Observable<any[]>;
const employeesDto = [
{
name: "Ariana",
age: 1
},
{
name: "Tom",
age: 2
},
{
name: "Justin",
age: 3
}
];
return of(employeesDto);
}
}
您可以试试这个:
this.service
.list()
.pipe(
map((list: EmployeesDto) => list.map(item => ({...item, Name: `Dr. ${item.Name}`})))
)
.subscribe(list => this.employeeList = list);
还创建了一个Stackblitz Demo供大家参考
我有一个从服务方法返回的 Observable 值,我想添加一个前缀,例如'Prof' 作为前缀使用 map()
运算符。
我的 returns Observable 方法是:
list(): Observable<EmployeesDto> {
items: Employees;
...
}
这是我尝试映射数据并分配它的方法:
...
employeeList : EmployeesDto;
this.service.list()
.pipe(
map((list: EmployeesDto) => {
list.items.forEach(m => {
m.Name = 'Dr.' + m.Name
});
this.employeeList = list; // the code does not hit there and cannot set data
})
)
但问题是我无法设置employeeList。那么,这个实现有什么问题?
更新: 最后一步,我使用这种方法进行了测试:
import { Component, OnInit } from "@angular/core";
import { of, Observable } from "rxjs";
import { map } from "rxjs/operators";
@Component({
selector: "my-app",
templateUrl: "./app.component.html"
})
export class AppComponent implements OnInit {
employees$: Observable<any[]>;
employeesDto$: Observable<any[]>;
constructor() {}
ngOnInit(): void {
this.initializeData();
}
initializeData(): void {
// this.employees$ = this.getMockEmployees().pipe(
// map(list => list.map(item => ({ ...item, name: `Dr. ${item.name}` })))
// );
this.employees$ = this.getMockEmployeesDto().pipe(
map(list => list.map(item => ({ ...item, name: `Dr. ${item.name}` })))
)
.subscribe(list => {
console.log(list);
}
)
}
getMockEmployees(): Observable<any[]> {
const employees = [
{
name: "Ariana",
age: 1
},
{
name: "Tom",
age: 2
},
{
name: "Justin",
age: 3
}
];
return of(employees);
}
getMockEmployeesDto(): Observable<any[]> {
const employees$: Observable<any[]>;
const employeesDto = [
{
name: "Ariana",
age: 1
},
{
name: "Tom",
age: 2
},
{
name: "Justin",
age: 3
}
];
return of(employeesDto);
}
}
您可以试试这个:
this.service
.list()
.pipe(
map((list: EmployeesDto) => list.map(item => ({...item, Name: `Dr. ${item.Name}`})))
)
.subscribe(list => this.employeeList = list);
还创建了一个Stackblitz Demo供大家参考