Angular - 为啥我得到对象而不是对象数组?
Posted
技术标签:
【中文标题】Angular - 为啥我得到对象而不是对象数组?【英文标题】:Angular - Why am I getting object of objects instead of array of objects?Angular - 为什么我得到对象而不是对象数组? 【发布时间】:2020-08-10 11:57:12 【问题描述】:组件:
applicants: UserProfile[];
ngOnInit()
this.store
.pipe(select(fromRootUserProfileState.getUserProfiles))
.subscribe((userProfiles: UserProfile[]) =>
this.applicants = userProfiles;
console.log('this.applicants:', this.applicants);
);
UserProfile 接口:
export interface UserProfile
id: number;
fullName: string;
roles?: Role[];
windowsAccount?: string;
firstName?: string;
lastName?: string;
email?: string;
managerName?: string;
managerId?: number;
managerEmail?: string;
companyId?: number;
companyName?: string;
countryId?: number;
country: Country;
countryName?: string;
NgRx 效果:
@Injectable()
export class UserProfileEffects
constructor(
private actions$: Actions,
private userProfileService: UserProfileService
)
@Effect()
loadUserProfiles$: Observable<Action> = this.actions$.pipe(
ofType(userProfileActions.UserProfileActionTypes.LoadUPs),
mergeMap((action: userProfileActions.LoadUPs) =>
this.userProfileService.getUserProfiles().pipe(
map(
(userProfiles: Array<UserProfile>) =>
new userProfileActions.LoadSuccessUPs(userProfiles)
),
catchError((err) => of(new userProfileActions.LoadFailUPs(err)))
)
)
);
服务:
getUserProfiles(): Observable<UserProfile[]>
return this.http.get<UserProfile[]>(this.baseUrl + 'userprofiles/getuserprofiles');
后端 API (.Net Core):
[HttpGet("[action]")]
public async Task<IActionResult> GetUserProfiles()
var userProfiles = await _userProfileRepository.GetUserProfiles();
var userProfileViewModels = _mapper.Map<IEnumerable<UserProfileViewModel>>(userProfiles);
return Ok(userProfileViewModels);
但在组件中,我不能将我的“申请者”数组视为正确的数组,它是某种对象。这发生在我的代码中,为什么我没有得到我明确定义的对象数组?
【问题讨论】:
你能发布你的控制台响应吗? 我只是在最后添加了片段。 正如我在响应中看到的,它不是一个数组,它的对象索引为 0,1,2 等等。您不能对对象使用推送功能。您需要检查实现,或者是否可以在 stackblitz 中发布。 后端API方法也加入了。 【参考方案1】:我现在可以建议解决方法。您可以从下面的代码将响应转换为数组。
for (var key in userProfiles )
if (userProfiles.hasOwnProperty(key))
var val = userProfiles[key];
this.applicants.push(val)
之后就可以对applicants
变量进行push操作了。
【讨论】:
以上是关于Angular - 为啥我得到对象而不是对象数组?的主要内容,如果未能解决你的问题,请参考以下文章
为啥如果我得到计算对象中的对象属性未定义而不是对象本身?哪种方法更适合这种情况?
为啥 vuex 在 Quasar App 中返回对象而不是数组?
为啥 object dtype 数组包含 datetime.datetime 对象而不是 numpy.datetime64 对象?