我如何 pipe/map 到 return Angular 中的数组 7
How do I pipe/map to return an array in Angular 7
当我通过 HttpClient 进行 GET 调用时,我想传回一个实际类型化对象的数组,而不是一个泛型 'object',所以我尝试这样做:
getExistingArsByLab(labId: number): Observable<EhsAssessmentAr[]> {
return this.http
.get<EhsAssessmentAr[]>(`${this.baseUrl}/ar?labId=${labId}`)
.pipe(
map(x => {
const ret = EhsAssessmentAr.fromJson(x);
ret.ar = this.sanitizer.sanitize(SecurityContext.HTML, ret.ar.replace(/\n/g, '<br/>'));
return ret;
})
)
}
那个 fromJson
方法被声明为 return 正确的 class,我想既然我通过 map
发送这个,我会得到一个数组.我真的是 RxJs 的新手,所以我确定我只是在那里做了一些完全愚蠢的事情。
我收到错误:
TS2322: Type 'Observable<EhsAssessmentAr>' is not assignable to type 'Observable<EhsAssessmentAr[]>`
您可以强类型映射 响应并检查您returning 数组 不是单个元素:
getExistingArsByLab(labId: number): Observable<EhsAssessmentAr[]> {
return this.http
.get<EhsAssessmentAr[]>(`${this.baseUrl}/ar?labId=${labId}`)
.pipe(
map((x:EhsAssessmentAr[]) => {
const ret = EhsAssessmentAr.fromJson(x);
ret.ar = this.sanitizer.sanitize(SecurityContext.HTML, ret.ar.replace(/\n/g, '<br/>'));
return ret;
})
)
}
专业提示 2: 如果您出于任何原因更改 return 类型,您可以使用:
return <TypedArray[]> arrParsed["something"];
专业提示 3: Angular 讨厌你用 html 喂它所以你需要找到一些很酷的解决方案,比如在模板添加替换时标记到新行
这已经是 Angular 7 HttpClient 的默认行为。因此,除非您需要对 html 或示例中的内容进行一些额外处理,否则您只需要以下内容:
getExistingArsByLab(labId: number): Observable<EhsAssessmentAr[]> {
return this.http
.get<EhsAssessmentAr[]>(`${this.baseUrl}/ar?labId=${labId}`)
}
当我通过 HttpClient 进行 GET 调用时,我想传回一个实际类型化对象的数组,而不是一个泛型 'object',所以我尝试这样做:
getExistingArsByLab(labId: number): Observable<EhsAssessmentAr[]> {
return this.http
.get<EhsAssessmentAr[]>(`${this.baseUrl}/ar?labId=${labId}`)
.pipe(
map(x => {
const ret = EhsAssessmentAr.fromJson(x);
ret.ar = this.sanitizer.sanitize(SecurityContext.HTML, ret.ar.replace(/\n/g, '<br/>'));
return ret;
})
)
}
那个 fromJson
方法被声明为 return 正确的 class,我想既然我通过 map
发送这个,我会得到一个数组.我真的是 RxJs 的新手,所以我确定我只是在那里做了一些完全愚蠢的事情。
我收到错误:
TS2322: Type 'Observable<EhsAssessmentAr>' is not assignable to type 'Observable<EhsAssessmentAr[]>`
您可以强类型映射 响应并检查您returning 数组 不是单个元素:
getExistingArsByLab(labId: number): Observable<EhsAssessmentAr[]> {
return this.http
.get<EhsAssessmentAr[]>(`${this.baseUrl}/ar?labId=${labId}`)
.pipe(
map((x:EhsAssessmentAr[]) => {
const ret = EhsAssessmentAr.fromJson(x);
ret.ar = this.sanitizer.sanitize(SecurityContext.HTML, ret.ar.replace(/\n/g, '<br/>'));
return ret;
})
)
}
专业提示 2: 如果您出于任何原因更改 return 类型,您可以使用:
return <TypedArray[]> arrParsed["something"];
专业提示 3: Angular 讨厌你用 html 喂它所以你需要找到一些很酷的解决方案,比如在模板添加替换时标记到新行
这已经是 Angular 7 HttpClient 的默认行为。因此,除非您需要对 html 或示例中的内容进行一些额外处理,否则您只需要以下内容:
getExistingArsByLab(labId: number): Observable<EhsAssessmentAr[]> {
return this.http
.get<EhsAssessmentAr[]>(`${this.baseUrl}/ar?labId=${labId}`)
}