尝试在 angular 中使用映射运算符转换对象(类型转换)
Try to transform object (type casting) using map operator in angular
Api 响应 (json) -
{
"count": 1050,
"next": "....",
"previous": null,
"results": [
{
"name": "Test1",
"url": "https://test/1/"
},
{
"name": "Test2",
"url": "https://test/2/"
}
]
}
接口:
export interface ITestModel{
name: string;
url: string;
}
服务:
getData(): Observable<ITestModel[]> {
return this.http.get<ITestModel[]>(this.apiUrl).pipe(
map((res) =>
res.map((data) => ({
name: data.name,
url: data.url
}))
)
);
}
错误:(当我在控制器中订阅上述功能时)
core.js:4352 错误类型错误:res.map 不是 MapSubscriber.project 处的函数 (test.service.ts:19)
期望:
- 在 getData() 函数中,我想将 observable 转换为 ITestModel[]
- 订阅时的预期输出 (Json)
[
{
“名称”:“测试1”,
"url": "https:///test/1/"
},
{
"name": "测试2",
"url": "https:///test/2/"
}
]
谢谢!
试试这个:
getData(): Observable<ITestModel[]> {
return this.http.get<any>(this.apiUrl).pipe(
map((res) =>
res.results.map((data) => {
return {
name: data.name,
url: data.url
};
});
)
);
}
Api 响应 (json) -
{
"count": 1050,
"next": "....",
"previous": null,
"results": [
{
"name": "Test1",
"url": "https://test/1/"
},
{
"name": "Test2",
"url": "https://test/2/"
}
]
}
接口:
export interface ITestModel{
name: string;
url: string;
}
服务:
getData(): Observable<ITestModel[]> {
return this.http.get<ITestModel[]>(this.apiUrl).pipe(
map((res) =>
res.map((data) => ({
name: data.name,
url: data.url
}))
)
);
}
错误:(当我在控制器中订阅上述功能时)
core.js:4352 错误类型错误:res.map 不是 MapSubscriber.project 处的函数 (test.service.ts:19)
期望:
- 在 getData() 函数中,我想将 observable 转换为 ITestModel[]
- 订阅时的预期输出 (Json)
[ { “名称”:“测试1”, "url": "https:///test/1/" }, { "name": "测试2", "url": "https:///test/2/" } ]
谢谢!
试试这个:
getData(): Observable<ITestModel[]> {
return this.http.get<any>(this.apiUrl).pipe(
map((res) =>
res.results.map((data) => {
return {
name: data.name,
url: data.url
};
});
)
);
}