在 Angular 2 中解析来自 Hal+JSON 对象的信息

2024-03-12

我有一个 spring-data-rest 存储库,它生成一个 hal+json 对象,我希望我的 Angular 2 前端能够接收和显示该对象。

Hal+Json 对象:

{
  "_embedded" : {
    "users" : [ {
      "name" : "Bob",
      "_links" : {
        "self" : {
          "href" : "http://localhost:4200/api/users/1"
        },
        "user" : {
          "href" : "http://localhost:4200/api/users/1"
        }
      }
    }, {
      "name" : "Joe",
      "_links" : {
        "self" : {
          "href" : "http://localhost:4200/api/users/2"
        },
        "user" : {
          "href" : "http://localhost:4200/api/users/2"
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:4200/api/users"
    },
    "profile" : {
      "href" : "http://localhost:4200/api/profile/users"
    },
    "search" : {
      "href" : "http://localhost:4200/api/users/search"
    }
  },
  "page" : {
    "size" : 20,
    "totalElements" : 2,
    "totalPages" : 1,
    "number" : 0
  }
}

我有一个服务向这个 api 发出 get 请求。

用户.service.ts:

import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { User } from './user.model';
import { Observable } from 'rxjs';
import 'rxjs/add/operator/map'

@Injectable()
export class UserService {

  constructor(private http: Http) {
  }

  findAllUsers(): Observable<Array<User>> {
    return this.http.get('/api/users')
      .map((response: Response) => response.json())
      .map((data: Array<User>) => {
        return data;
      });
  }
}

然后我的 users.component 从服务中调用 findAllUsers 方法。

用户.组件.ts

import { Component, OnInit } from '@angular/core';
import { User } from './user.model';
import { UserService } from './user.service';

@Component({
  selector: 'app-users',
  providers: [UserService],
  templateUrl: './users.component.html',
  styleUrls: ['./users.component.css']
})
export class UsersComponent implements OnInit {
  users: User[];

  constructor(private userService: UserService) {
  }

  ngOnInit(): void {
   this.userService.findAllUsers().subscribe((data: Array<User>) => {
     this.users = data;
   });
  }

}

最后,users.component.html:

<h4>Users:</h4>

<div *ngFor="let user of users">
  {{user}}
</div>

在我看来,我收到一条错误消息:Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.我不知道如何解决这个问题。

如果我之前尝试使用调试器data在服务中返回,然后我可以看到我的 hal+json 对象=data,我可以从中看到我想要的正确信息data._embedded_users。但它不能映射到 User[] 因为_embedded不是我的用户模型的属性。我需要先对 Hal+Json 对象做一些事情吗?


我需要先对 Hal+Json 对象做一些事情吗?

这不是很明显吗?只需提取服务中的数据即可

findAllUsers(): Observable<Array<User>> {
  return this.http.get('/api/users')
    .map((response: Response) => response.json())
    .map((data: any) => {
      return data._embedded.users as User[];
    });
}

你之前拥有的

.map((data: Array<User>) => {
  return data;
});

是不正确的,因为您假设数据传递给第二个map是用户数组,而实际上它是整个 HAL 对象。将其更改为any允许您从中提取用户两次。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Angular 2 中解析来自 Hal+JSON 对象的信息 的相关文章

  • 在 Angular 2 中进行并行调用 http get 或 post 调用

    如何在 Angular 2 中进行并行调用 HTTP get 或 post 调用 我有 2 个服务电话 其中一个愈伤组织的响应必须拨打另一个电话 有人可以建议我如何通过错误处理场景进行这些并行调用吗 如果您的服务是Observable基于而
  • 将 TypeMoq 模拟与 Angular TestBed 结合使用

    我定义了一个FooService如下 import Injectable from angular core export interface Foo Foo string Injectable export class FooServic
  • Angular2、ZoneJS 和外部更改的 DOM

    我需要一些有关 Angular2 RC1 Web 应用程序中外部更改的 DOM 的帮助 场景很简单 我确实有一个带有相应模板的组件 其中包含一个具有如下 ID 的空 div div div typescripted 组件有一个 ngOnIn
  • 包子路径'./src/ngtsc/reflection'不是由/node_modules/@angular/compiler-cli/package.json中的“exports”定义的

    我正在尝试用 jest 运行 ng 测试并收到以下错误 Package subpath src ngtsc reflection is not defined by exports in Users oyf992 source app mn
  • 将 Angular 项目从 StackBlitz 导出到本地

    我想导出在 StackBlitz 中完成的 Angular 项目 并使用以下命令从 Angular CLI 执行它ng serve就像我们对在本地计算机中创建的 Angular 项目所做的那样 去做就对了 这是您需要点击的地方
  • Angular 2 可观察间隔锁定 UI

    当我使用Observable Interval要执行 UI 的 http 刷新 如果间隔太快 它会锁定 UI 上的按钮 使其无法工作 按钮没有记录点击 似乎是一个计时问题 如果我增加时间并因此错过了 get 调用 则按钮可以工作 但数据会延
  • Angular 7通过调用两次服务订阅方法进行通信

    我正在使用角度 尝试与非父子组件进行通信 所以我通过服务来传达它 服务 ts Istoggle false Output change EventEmitter lt boolean gt new EventEmitter toggle t
  • 使用 AngularFire 从 Firestore 过滤数据

    我正在尝试使用 Angularfire 的查询集合从 Firestore 过滤数据 https github com angular angularfire2 blob master docs firestore querying coll
  • mat-table 中每行的 formGroup 数组

    我有一个 formGroup 数组 其中每个元素代表一个表单 接下来我有一个 mat 表 我想要做的是将每个 tr 即每一行 生成为不同的表单 以便表的第 i 行链接到第 i 个 formGroup 因此 在第 i 行内 每个 td 元素都
  • Angular2 authguards 执行异步函数失败

    我想通过检查用户是否从服务器登录来保护我的路由 但异步函数不会被执行 这是我的代码 canActivate route ActivatedRouteSnapshot state RouterStateSnapshot Observable
  • 无法在 Angular 4 中使用自定义主题

    我正在尝试在我的角度项目中使用我的自定义主题 它没有按预期工作 我收到以下错误 node modules css loader sourceMap false importLoaders 1 node modules postcss loa
  • 如何在 ngrx/effects 中执行 if/else 操作?

    我正在使用 ngrx effects 我想根据以下情况分派不同的操作foo商店里的状态 这就是我现在正在做的 Effect foo1 this updates whenAction Actions FOO filter obj gt obj
  • 角度订阅响应

    好吧 我对 Angular 还很陌生 所以我遇到了这个小问题 所以我遵循 Angular 指南 https angular io guide http https angular io guide http 所以我的问题是我的 http r
  • 如何测试包含自定义表单控件的组件?

    我有一个这样的组件 Component selector app custom form control templateUrl
  • 如何在 TypeScript 中禁用/抑制库中的错误?

    我打开了一些编译器开关来报告代码中的更多问题 例如严格的空检查 但我在使用的库中遇到了数十个错误 例如 default xxx node modules angular core src util decorators d ts 11 5
  • Angular2 与 Jquery-ui 滑块

    我尝试将 Jquery ui 滑块与 angular2 一起使用 我想让变量 slideValue 显示滑块的值 但我不知道如何将我的模型或变量从角度绑定到滑块 这是我的滑块组件 import Component ElementRef In
  • MatAutocomplete 值 X 显示

    我的自动完成显示具有以下定义的对象的值 export class Person id number name string cityName string 这是自动完成模板
  • 在 Angular 中深度复制对象

    AngularJS 有angular copy 深度复制对象和数组 Angular 也有类似的东西吗 您还可以使用 JSON parse JSON stringify Object 如果它在你的范围内 那么它就存在于每个 Angular 组
  • Windows 10 中的 npm 安装错误( npm install -g angular-cli )

    node v v4 5 0 npm v 5 0 1 有人在 Windows 10 中安装 angular cli 时遇到过这种问题吗 请尝试以下操作 step 0 运行这个命令 npm uninstall g angular cli npm
  • 如何显示 GroupList 的 FormArray?

    我正在尝试制作一个交互式表单 在每一行上列出一个项目以及一个删除按钮 在我的示例中称为 verwijderen 这些项目是从数据库中检索的 并且每个项目都实例化为名为的自定义对象LaborPeriod 然后这些对象被转化为FormGroup

随机推荐

  • 在Java中捕获全局按键

    因此 每当用户在 Swing 应用程序中的任意位置按下空格键时 我想触发一个事件 暂停 取消暂停某些媒体 由于有如此多的控件和面板可以具有焦点 因此实际上不可能向所有控件和面板添加关键事件 更不用说总的 所以我发现 KeyboardFocu
  • grobToDev.default(gTree, dev) 中的错误

    我正在尝试使用shiny gridSVG 构建一个应用程序 这个问题不断发生 我对此一无所知 我的服务器 R library grid library lattice library gridSVG shinyServer function
  • 在 Ionic 2 应用程序中,模板在构造函数之前首先加载

    我正在开发 ionic 2 应用程序 我正在尝试调用组件中的服务并尝试在模板中访问它 但我面临的问题是模板首先加载 然后组件中的承诺输出成功 因此 如果我尝试访问任何 req obj 值 我会从模板中收到未定义的错误 如何确保承诺首先得到解
  • 渐进式 Web 应用程序:离线缓存在 Android 上不起作用,但在 Chrome 开发工具上起作用

    我有一个简单的 PWA 可以在网上正常运行 我还在 Chrome 开发工具中测试了离线行为 并且 Service Worker 正在完美地完成其工作 但是 当我从 Android 手机运行该应用程序时 它无法离线工作 因为离线时缓存存储不再
  • 如何更改 .npz 文件中的值?

    我想改变一个值npz file The npz文件包含几个npy的 我想要除了一个以外的所有 run param 保持不变 我想保存原始文件 这是我的工作代码 DATA DIR C Projects Test data ass file n
  • 从 shell 脚本生成交互式 telnet 会话

    我正在尝试编写一个脚本来允许我登录到控制台服务器的 48 个端口 以便我可以快速确定哪些设备连接到每条串行线路 本质上 我希望能够有一个脚本 给定主机 端口列表 远程登录到列表中的第一个设备 并使我处于交互模式 以便我可以登录并确认设备 然
  • MAC M1 安装“sharp”模块时出错

    Running npm run dev gatsby develop 在 MacBook Pro M1 芯片上退出 Error Something went wrong installing the sharp module Running
  • JSON ValueError:期望属性名称:第 1 行第 2 列(字符 1)

    我在使用 json loads 转换为 dict 对象时遇到问题 我无法弄清楚我做错了什么 我运行这个的确切错误是 ValueError Expecting property name line 1 column 2 char 1 这是我的
  • 在 onStopTrackingTouch 中获取进度,而不是在搜索栏中的 onProgressChanged 中获取进度

    我是 Android 开发新手 我用onProgressChanged获取当前进度 因为进度是函数的参数 but 我只想获得进度的最终值当用户释放seekbar不是立即值 提前致谢 The onStopTrackTouch方法定义在OnSe
  • C 中带有函数的 realloc 结构

    我的 C 程序崩溃了 我太新了 无法弄清楚 到目前为止 它非常简单 我想代码足以找出问题所在 我只是想逐行读取文件 一旦内存不足 我会将结构的内存加倍 如果这还不够 我会提供您需要的其他信息 非常感谢您的帮助 因为我已经被困了几个小时了 J
  • 如何在 MySQL 中获得精确的小数值而不进行四舍五入

    我有下面这个 SQL 脚本 select round 72 396 2 我期望的结果是 72 39 我不想四舍五入这个数字 如果我使用select round 72 396 2 我得到的结果是 72 40如何在不使用 Mysql 舍入的情况
  • 通过 putty 连接到 play-with-docker 实例

    我正在尝试通过 putty 连接到 docker 实例https labs play with docker com https labs play with docker com 我试过了 ip172 18 0 21 email prot
  • 从 Play JSON API 获取更好的错误消息

    Play JSON API 生成的错误消息类型示例 scala gt import play api libs json import play api libs json scala gt Json obj k gt Json obj m
  • 在哪里以及如何使用嵌套类? [复制]

    这个问题在这里已经有答案了 我在想 如果一个类只能在另一个类中实例化 那么在该类中嵌套使用它是正确的 我认为这将有助于我们良好的设计 当我查看我的项目时 我几乎从未见过这样的嵌套结构 但是如果我尝试嵌套类 那么这次我的脑海中会出现另一个问题
  • Java检查Checkbox是否被选中

    I use CheckboxGroup cg new CheckboxGroup Checkbox c1 new Checkbox A false cg Checkbox c2 new Checkbox B false cg Checkbo
  • 如何使用 Angularjs 以 PHP 方式提交表单?

    我发现AngularJS 有点阻止了原始表单的提交方式 https stackoverflow com questions 23813413 how to programmatically submit a form with angula
  • 如何在 ui-router 解析器中重定向?

    我正在尝试在 ui router 解析器内部进行重定向 并想知道是否有办法在路由器解析器中重新路由 目前这并不像人们想象的那样有效 resolver auth state if auth isLoggedIn state go noLogg
  • VB 6:一个窗体上可以有多少个控件?

    我知道命名控件的限制是 254 超出这个限制就必须使用控件数组 但看来我们也达到了数组的极限 知道绝对极限是多少吗 没有absolute限制 如果您在表单上放置了足够多的控件 最终将耗尽内存 我制作了一个测试应用程序 将命令按钮加载到控制数
  • 如何使用“cmp”比较两个二进制文件并找到它们不同的所有字节偏移量?

    我希望获得有关 Bash 脚本循环的帮助 该循环将显示两个二进制文件之间的所有差异 仅使用 cmp file1 file2 它只显示我想使用 cmp 的第一个更改 因为它给出了每个更改所在位置的偏移量和行号 但如果您认为有更好的命令 我愿意
  • 在 Angular 2 中解析来自 Hal+JSON 对象的信息

    我有一个 spring data rest 存储库 它生成一个 hal json 对象 我希望我的 Angular 2 前端能够接收和显示该对象 Hal Json 对象 embedded users name Bob links self