类型“Object”上不存在属性“json”

2024-01-25

我正在尝试使用 Angular 2 HttpClient 通过 REST 获取数据。我正在关注这里的角度教程https://angular.io/tutorial/toh-pt6 https://angular.io/tutorial/toh-pt6并根据英雄和 HTTP部分您将看到这段代码,用于通过 http 获取英雄数据。

getHeroes(): Promise<Hero[]> {
  return this.http.get(this.heroesUrl)
         .toPromise()
         .then(response => response.json().data as Hero[])
         .catch(this.handleError);
}

下面是我在应用程序中编写的类似版本

fetch(startIndex: number, limit: number): Promise<Order[]> {
    let url = this.baseUrl + "&startIndex=" + startIndex + "&limit=" + limit;

    return this.http.get(url)
                .toPromise()
                .then(response => response.json().results as Order[])
                .catch(this.handleError);
}

我正在使用 IntelliJ Idea,调用 response.json() 时有一条红线,甚至当我尝试使用ng build我得到了错误。

类型“Object”上不存在属性“json”。

您可能会注意到,而不是json().data I have json().results。这是因为根据教程,服务器响应的对象具有data字段,但我自己的服务器响应一个具有results场地。如果您向下滚动一下教程,您就会看到这一点。

请注意服务器返回的数据的形状。这个特别的 内存中 Web API 示例返回具有数据属性的对象。你的 API 可能会返回其他内容。调整代码以匹配您的网络 API。

为了解决这个问题,我尝试了这样的事情

(response: Response) => response.json().results as Order[]

当我这样做时, .json() 方法已解决,但弹出另一个错误

Promise 类型上不存在属性结果

我尝试通过定义接口来解决这个问题

interface OrderResponse {
    orders: Order[];
}

并将 get 调用修改为

 .get<OrderResponse>(url)...

但这也行不通。又弹出一个错误

类型“OrderResponse”不可分配给类型“Response”。

需要注意的一件事是,在教程中他们使用了 Angular HttpModule,但在我的应用程序中我使用的是新的 Angular HttpClientModule,所以也许这就是错误出现的地方。

我是 Angular 2 的新手,这是我用它构建的第一个应用程序。如果上述代码对于新的 HttpClientModule 不再有效,我将不胜感激有关如何使用新的 HttpClientModule 实现相同目标的任何帮助。

我发现类似的问题类型“{}”上不存在属性“json” https://stackoverflow.com/questions/33919710/property-json-does-not-exist-on-type/33919897 and 类型“对象”上不存在属性 https://stackoverflow.com/questions/43338763/property-does-not-exist-on-type-object但那里的答案都没有帮助我。

Update

正如评论所建议的,新的 HttpClientModule 中没有 .json() 方法。我仍然希望获得有关如何使用新模块实现相同效果的帮助。从指南中他们做了这样的事情

http.get<ItemsResponse>('/api/items').subscribe(data => {
  // data is now an instance of type ItemsResponse, so you can do this:
  this.results = data.results;
});

我完全理解这一点,但我的问题是,该代码不在组件中,而是在服务中,因此调用订阅并将结果分配给实例字段没有多大意义。

我需要我的服务返回一组包含在 Promise 中的 Orders。我的组件可以像这样进行调用

this.orderService.fetch(0, 10).then(orders => this.orders = orders)

我还考虑在我的服务获取方法中声明一个局部变量,以便我可以执行以下操作

.subscribe(data => {
    this.orders = data.results;
}
// and out of the get call I return my local variable orders like
return Promise.resolve(orders)

但这对我来说没有多大意义,因为对 .get() 的调用是异步的,并且该方法甚至可能在获取所有数据之前返回并且订单数组可能为空。

Update

根据要求,这里是handleError的代码

private handleError(error: any): Promise<any> {
    console.log('An error occured ', error);
    return Promise.reject(error.message || error);
}

对于未来的访客: 在新的HttpClient https://angular.io/guide/http(角度 4.3+),response对象默认是JSON,所以你不需要这样做response.json().data不再了。只需使用response直接地。

Example(根据官方文档修改):

import { HttpClient } from '@angular/common/http';

@Component(...)
export class YourComponent implements OnInit {

  // Inject HttpClient into your component or service.
  constructor(private http: HttpClient) {}

  ngOnInit(): void {
    this.http.get('https://api.github.com/users')
        .subscribe(response => console.log(response));
  }
}

不要忘记导入它并将该模块包含在imports在你的项目中应用程序模块.ts:

...
import { HttpClientModule } from '@angular/common/http';

@NgModule({
  imports: [
    BrowserModule,
    // Include it under 'imports' in your application module after BrowserModule.
    HttpClientModule,
    ...
  ],
  ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类型“Object”上不存在属性“json” 的相关文章

  • Angular 2在两个组件之间传递数据

    我想在两个组件之间传递数据 但我的问题是 我有两个组件 假设一个是 主 另一个是 模态对话框 在我的主要部分中 我想打开模态对话框并从模态对话框中获取数据 而无需离开我的主要组件 我知道如何使用 Input 但我看不到在我的应用程序中使用它
  • 角度 2 ngIf 与可观察?

    我有一个非常简单的服务 它的工作是从 api authenticate url 获取 200 或 401 auth service ts Injectable export class AuthService constructor pri
  • ngbModal 作为通用确认框

    我正在尝试使用 ngbmodal 创建通用确认框 它将在整个应用程序中使用 其中 标题和消息将从调用组件传递到模态 我创建为 DialogService 并添加到 EntryComponents 中 现在我可以显示确认框 但无法得到结果 下
  • 该命令只能在 CLI 项目内部运行

    由于某些原因 我想使用Angular v5如果我运行以下命令 它会在其中构建一个应用程序angular 6这是我不想要的 ng new hello this creates angular app in the latest version
  • 在 Angular 4 中显示订阅数据

    我需要帮助来显示 Angular 4 中 api 订阅的输出 既然我写了 data data data 但它说类型对象上不存在属性数据 我该怎么做呢 我如何在浏览器中输出它 下面是我的代码和api图片 import Component On
  • Angular2 - 添加新的
  • 项目 onClick 事件
  • 我使用 ngFor 迭代数组以便在列表中显示它们 但我无法在列表中添加新项目 在 Onclick 事件期间我得到一个空的 li 也许我没有链接正确的东西 指令 或者是什么 也许我使用了错误的变量 我的导出类有我的构造函数 export cl
  • 类内的枚举(TypeScript 定义文件)

    我已经四处搜寻 但似乎找不到答案 希望您能提供帮助 如何添加枚举Image 这是我理想的情况 但我得到了一个错误 declare module Lib export module Graphics export class Image en
  • 将 JS 库 xml2js 与 Angular 2 结合使用

    我正在尝试在 Angular 2 带有 TypeScript 的 RC 1 Web 应用程序中使用 xml2js 作为 XML 解析器 但是我只收到一些错误并且没有有效的解决方案 这是我一步一步所做的 通过安装 xml2jsnpm inst
  • Angular 2 中的动态管道

    我正在尝试创建一个组件 您可以在其中传递应用于组件内部列表的管道 通过测试和寻找答案 我发现唯一的解决方案似乎是创建类似的东西
  • Pako 无法压缩 python 中生成的 gzip 文件

    我使用以下代码从 python 生成 gzip 文件 使用 python 3 file gzip open output json gzip wb dataToWrite json dumps data encode utf 8 file
  • 如何在 angular2 组件中导入 npm 包?

    我正在尝试学习 ng2 的诀窍 但依赖注入系统快要了我的命 我正在使用 ng 快速入门 https github com angular quickstart blob master README md https github com a
  • Exceljs:迭代每行和每列的每个单元格

    我想在所有单元格中添加粗边框 这是一个有角度的项目 我正在使用打字稿 我可以为 1 个单元格做到这一点 worksheet getCell A1 border top style thick left style thick bottom
  • 获取 pdf 第 1 页(共 2 页)的图像

    我正在使用 html2canvas 和 jsPDF 以及 Angular4 创建图像 我想将此图像放置在 2 页生成的 pdf 的第 1 页上 但似乎这条线 doc save test pdf 需要在函数内部htm2canvas 因为如果我
  • 如何使用 Angular CLI 添加应用程序范围的 CSS 文件?

    我想向我的 Angular 2 应用程序添加一些分片样式 例如字体和配色方案等将在任何地方使用的东西 过去 我总是通过在索引页面添加这样的标签来完成此操作 这不适用于 CLI 用于为应用程序提供服务的任何内容 我尝试在构建后手动将 css
  • Angular 4:Bootstrap 的折叠无法使用 data-target 属性

    我对 Angular 4 使用 Angular CLI 还是个新手 我不知何故无法完成简单的 Bootstrap Collapse 工作 以下是我的崩溃代码 div class panel panel default div class p
  • 为什么 Angular 4.3 中的 httpclient 返回 Object 而不是 any?

    Angular 4 3 中的新 HttpClient 类似乎又回来了Object代替any默认情况下 鉴于打字稿文档所述 这样做是否有特殊原因 永远不要使用数字 字符串 布尔值或对象类型 这些 类型指的是几乎从未使用过的非原始装箱对象 适当
  • 为什么 TypeScript 将类打包在 IIFE 中?

    这是一个 TypeScript 类 class Greeter public static what string return Greater public subject string constructor subject strin
  • 在 pre 标签内电子加载 html

    我最近创建了一个电子 角度应用程序 它在内部运行以下内容main ts win loadURL url format pathname path join dirname dist index html protocol file slas
  • 如何连接我的 angular2 应用程序 javascript 文件

    对于我的 Angular2 TypeScript 应用程序 我将所有 js 文件合并到一个 app min js 文件中 然后 System import 将此文件导入到我的 index html 页面 然后我得到一个同一模块文件中的多个匿
  • 如何使用 angular2 的路由器实现面包屑[重复]

    这个问题在这里已经有答案了 I use angular2最近 但不知道如何实施breadcrumb组件 任何人都可以帮忙吗 div class row style padding top 15px ol class breadcrumb l

随机推荐

  • 正则表达式使用 YYYY-MM-DD 格式验证 PHP 中的日期

    我正在尝试制作一个日期正则表达式验证器 我遇到的问题是我正在使用输入字段 date type 这在 Chrome 中就像一个魅力 它会在 Chrome 中打开类似日历的功能 但在其余部分它什么也不做 所以我决定手动输入其余部分的日期 这是我
  • 等待目标设备上线

    我最近更新到 Android Studio 2 3 现在当我尝试运行该应用程序时 模拟器无法上线 300 秒后超时 此外 该应用程序遇到了致命异常错误 OOM 我不确定如何解决该问题 或者这是否是模拟器问题的一部分 任何帮助深表感谢 再说一
  • 如何将数据从一张工作表导入到另一张工作表

    我在 Excel 中有两个不同的工作表 所有第 1 行单元格中的标题都相同 a1 id b1 名称 c1 价格 我的问题是 有没有办法将数据 如名称 从一个工作表导入到另一个工作表中 其中两个工作表中的 id 相同 eg sheet 1 s
  • 如何找到 2 个数字中的最大值(更大、更大)?

    我有两个变量value and run value 9999 run problem getscore 如何找出哪个更大 并获得更大的值 See also Find the greatest largest maximum number i
  • Thread.Sleep 与 Task.Delay?

    我知道Thread Sleep阻塞一个线程 但确实Task Delay还阻止 或者只是像Timer它对所有回调使用一个线程 当不重叠时 this https stackoverflow com questions 15341962 how
  • 如何在 git 服务器端禁用压缩?

    我有一个存储库 从中拉取需要很长时间 因为服务器几乎没有可用 RAM 并且它在交换时进行了大量操作 remote Compressing objects 24 正在发生 即使我在服务器本地克隆 网络没有那么受限 因此发送所有未压缩的数据就可
  • PHP:多维数组中的foreach

    我有一个动态表单来创建创建数组的章节和子章节 var dump POST array textfield gt array 0 gt title one 1 gt title two 2 gt title three 4 gt title
  • SwiftUI - 如何将工具栏添加到 NavigationView 内的 TabView 选项卡?

    我正在尝试添加不同的toolbars 到我的每个选项卡 但它们没有显示 该应用程序主要在横向 iPad 上使用 我可以将工具栏添加到TabView本身并显示 但我不知道如何将按下导航堆栈的按钮传递到要在本地处理的各个视图 视图模型 我尝试过
  • Flutter:-如何将视图放置在屏幕的中心和底部?

    我正在创建教程屏幕 其中有两个视图 一个应该位于屏幕中央 另一个应该位于屏幕底部 但我的两种观点都不正确 请检查下面的图片 我已经完成了一些代码行来做到这一点 但没有得到正确的解决方案 请检查下面的代码一次 import package f
  • 如何将ajax放入循环中?

    我在循环内的 ajax 请求中有一个 ajax 请求 这里是 for var i 0 i lt input files length i ajaxFileUpload url dasdasdsa success function ajax
  • Python(flask/marshmallow)ValueError:解包值太多(预期为 2)

    我正在开发 Flask 项目 并使用 marshmallow 来验证用户输入 下面是一个代码片段 def create user in data request get json data errors Userschema load in
  • 如何在 Vue.js 方法函数中设置默认参数值?

    我试图在我的组件方法之一中为函数设置默认参数值 例如 methods myFuntion isAction false 但是当调试 isAction 的值时我得到一个 MouseEvent 我找到了解决方案 看起来事件也默认传递给该方法 因
  • 带有 ASP.NET 网站的 NUnit

    我目前正在尝试升级我们工作中的构建服务器 从没有构建服务器到拥有一个 我正在使用 JetBrainsTeamCity http en wikipedia org wiki TeamCity 已经使用过锐锐 http en wikipedia
  • Angular2 和 TypeScript 导入 node_modules

    我有一个非常简单的 hello world Angular2 应用程序 我还做出了一个明显不合理的决定 即在我的开发项目和 Spring 后端的最终部署文件夹之间使用不同的目录结构 由于这种差异 我在 TypeScript 导入方面遇到了问
  • 从嵌套集生成 JSON(perl、sql、jquery)

    我在数据库中有内容页面 使用嵌套集 我需要通过 jQuery jsTree 插件显示它 需要返回带有如下数据的 JSON data node1Title children data subNode1Title children data s
  • 单击按钮上的 JFileChooser

    我有一个按钮 单击它我希望弹出 JFileChooser 我已经尝试过这个 JButton browse new JButton Browse add browse browse addActionListener new ClassBro
  • Azure Cosmos DB 检查字段中的数组是否包含在搜索数组中

    我有一个 Microsoft Azure CosmosDB MongoDB Api 数据库 我正在尝试获取其中一个数组字段完全包含在我的搜索数组中的所有文档 所以 我正在寻找的是 考虑到包含文档的集合测试 id 1 filters 1 2
  • Qt - 自定义小数点和千位分隔符

    如何将数字 双精度 转换为具有自定义小数点和千位分隔符的字符串 我见过 QLocale 但我不想选择本地化国家 地区 而是指定我自己的小数点和千位分隔符 Thanks Qt 不支持自定义区域设置 但仅处理组和小数点字符很简单 const Q
  • 查询对象 mongoose 的嵌套数组

    我想在嵌套对象中查找带有 Alexa 的名称 操场 https mongoplayground net p rqYQtf0liaX https mongoplayground net p rqYQtf0liaX item journal i
  • 类型“Object”上不存在属性“json”

    我正在尝试使用 Angular 2 HttpClient 通过 REST 获取数据 我正在关注这里的角度教程https angular io tutorial toh pt6 https angular io tutorial toh pt