angular - RxJs map 运算符以角度更改对象集合的属性值
问题描述
在我的角度组件中,我具有以下属性:
memberInfoLists$: Observable<MemberInfo[]>;
total$: Observable<number>;
memberPhotoUrl: string = environment.memberPhotoUrl;
memberDefaultPhoto: string = environment.defaultPersonPhoto;
现在在ngOnInit函数中,我调用了该服务来获取 observable 以填充memberInfoLists$属性。但在填充之前,我想更改集合中每个对象的属性值之一。这是我的代码:
ngOnInit(): void {
this.memberInfoLists$ = this.service.memberInfoLists$.pipe(map(item => item.forEach(y => {
if (y.MemberPhotoUrl) {
y.MemberPhotoUrl = this.memberPhotoUrl + y.MemberPhotoUrl;
}
else{
y.MemberPhotoUrl = this.memberDefaultPhoto;
}
if (y.VoterPhotoUrl) {
y.VoterPhotoUrl = this.memberPhotoUrl + y.VoterPhotoUrl;
}
else{
y.VoterPhotoUrl = this.memberDefaultPhoto;
}
return item;
})));
this.total$ = this.service.total$;
}
但它会引发以下异常:
src/app/setup-module/pages/member-info-list/member-info.component.ts:69:3
错误 TS2322:类型“Observable”不可分配给类型“Observable<MemberInfo[]>”。类型“void”不可分配给类型“MemberInfo[]”。
this.memberInfoLists$ = this.service.memberInfoLists$.pipe(map(item => item.forEach(y => {
谁能帮我解决这个问题?
解决方案
return 语句位于错误的位置,它应该在 forEach 之后
并且 forEach 周围应该有大括号
this.memberInfoLists$ = this.service.memberInfoLists$.pipe(
map((item) => {
item.forEach((y) => {
if (y.MemberPhotoUrl) {
y.MemberPhotoUrl = this.memberPhotoUrl + y.MemberPhotoUrl;
} else {
y.MemberPhotoUrl = this.memberDefaultPhoto;
}
if (y.VoterPhotoUrl) {
y.VoterPhotoUrl = this.memberPhotoUrl + y.VoterPhotoUrl;
} else {
y.VoterPhotoUrl = this.memberDefaultPhoto;
}
})
return item;
}
)
);
推荐阅读
- unit-testing - 如何从子目录访问测试方法
- express - 在哪里处理从 HTTP 到 HTTP 的重定向?
- caching - TYPO3:文件元数据更改时清除页面缓存
- spring - 是否可以创建一个忽略 URI 某些部分的代理控制器
- python - 在 Pandas 中切片字符串的有效方法
- r - r 将栅格堆栈或砖块转换为动画
- php - PHP nodeValue被归类为非对象
- r - R: 如何使用 get() 或 mget() 获取列表中的对象?
- python - 有没有更好的方法来操作熊猫数据框中的列名?
- python - setup.py install_requires 内置包:包含还是省略?