Ham*_*mer 4 javascript rxjs typescript rxjs5 angular
在我的service.component.j中,我从http调用返回一个Student数组的observable.Student对象有一个名为age的属性,
student.ts
export class Student {
id: number;
name: string;
age:number;
}
Run Code Online (Sandbox Code Playgroud)
service.componnet.js
getStudents (): Observable< Student[]>
Run Code Online (Sandbox Code Playgroud)
在作为上述观察者的观察者的studentManagement.component.ts中,我想总结学生的年龄.我知道我可以将sum()放在源代码中(这是不太优选的,因为我还需要在页面中显示学生的其他信息,例如id,name,个别年龄.)或者从_studentList计算它.除了这两个,还有其他方式吗?
private _studentList:Student[]=[];
.subscribe(
returnedStudents => {
console.log(returnedStudents);
this._studentList = returnedStudents;
},
erroMsg => this._errorMessage = erroMsg
)
Run Code Online (Sandbox Code Playgroud)
你可以map在Observable上使用它来返回总和.
getStudents().map(arr => arr.reduce((a, b) => a + b.age, 0));
Run Code Online (Sandbox Code Playgroud)
在这里,我们将内部数组减少为学生年龄属性的总和.现在我们拥有的是一个Observable<number>,它将排出年龄的总和.
如果要同时显示:
getStudents (): Observable< Student[]> {
return this.http.get(/*...*/).share();
}
getAgeSum(): Observable<number> {
return this.studentsObservable
.map(arr => arr.reduce((a, b) => a + b.age, 0));
}
Run Code Online (Sandbox Code Playgroud)
我们必须在这里调用share,以便Observable变得很热,并且不会两次执行HTTP请求.
| 归档时间: |
|
| 查看次数: |
4004 次 |
| 最近记录: |