angular - 无法从 Angular 中的 GET 请求中获取数据
问题描述
语境
Angular 8 应用程序请求外部 Web api。
GET请求结果是这样的:
{
"data": [
{
"name": "QWERTY",
"isValid": false
}]
}
我在我的服务中使用这个 TypeScript 代码调用 api:
private categoryUrl = 'http://localhost:8081/api/categories?OrderBy=';
return this.http.get<ICategory[]>(this.categoryUrl + prop )
.pipe(
tap(data => console.log(JSON.stringify(data)))
,map(item=>item.data)
);
}
我的问题
这行代码不编译声明:
错误 TS2339:“ICategory[]”类型上不存在属性“数据”
如果我注释map()行并运行它正在编译并且 Web 应用程序启动,但 html 模板上没有显示任何数据。
如果那时我没有停止就取消注释,应用程序重新编译,发送相同的错误消息。但是请求已正确完成,我可以在模板上看到我的结果。
我的问题
- 我该如何解释呢?
- 做这项工作的正确方法是什么?
谢谢
解决方案
您可能只是收到类型检查错误。类中的属性是什么ICategory
?
当您这样做this.http.get<ICategory[]>
时,HTTP 响应预计将遵循ICategory
. 检查是否data
是 中的属性ICategory
,并进行相应修改。
如果ICategory
应该是数组“数据”中的实际数据。您可以省略 Generic 类型或为其使用正确的接口:this.http.get<{ data: ICategory[]}>
推荐阅读
- amazon-web-services - BOTO3 S3 文件复制阻塞还是非阻塞?
- nuxt.js - 我如何为在 Nuxt2 和 Vue 测试实用程序(VTU)中使用 Vuex 和 Typescript 和 Composition Api 的组件编写测试?
- makefile - Makefile 中的@echo 总是导致错误“***缺少分隔符。停止。”
- postgresql-9.2 - 使用 PostgreSQL 9.2 版本出现登录问题
- django - 如何在 Django/Postgres 中使用 groupby 加入多个列
- java - 如何使用 Spring AOP 在服务中抛出业务异常?
- r - 有没有办法在 tblsummary 函数中使用反应式表达?
- java - 我可以使用 java-diff-utils 比较两个 html 文件并输出应用了样式的 html 吗?
- lumen - 为什么 oauth_access_tokens.expires_at 字段中的流明不起作用?
- reactjs - 如何使用 Next.js 访问浏览器历史记录?