【问题标题】:How to select one value from an object?如何从对象中选择一个值?
【发布时间】:2019-08-29 22:57:27
【问题描述】:

我在一个对象中获得了一个数据集,我只需要显示来自该对象的一个​​值。

如果这样做this.state.number,则会发生错误:

类型State[]中不存在number属性

private load() {
  this.statesService.getValueMax().subscribe(data => {
    this.state = data;
    console.log(this.state)
  });
}

console.log(this.state)

{
  date: "2019-08-29T07:00:00.000Z", 
  state_id: 21, 
  number: 2, 
  users_id: 207, ...
}

【问题讨论】:

  • 你做了 value = JSON.parse(this.state) 并尝试 value.number
  • 请提供console.log(this.state)的输出
  • 检查您的类型,显然您返回的数据类型为State[],而实际上它是State。错误消息准确地告诉我们;)
  • 你能创建一个stackblitz吗?

标签: typescript


【解决方案1】:

检查您的类型,错误告诉我们究竟出了什么问题,您已将服务返回的数据键入为State[],实际上您正在根据控制台日志接收单个对象。因此,更改您的服务方法以返回 State 的 observable:

getValueMax(): Observable<State> {
 // if you are also typing data in this function, make sure it's also `State`
 // ...
}

【讨论】:

  • 是的,console.log(this.state) 的真实输出表明它不是数组
【解决方案2】:

从错误信息来看,状态似乎是一个响应数组。

试试:

console.log(this.state[0].number)

【讨论】:

  • state 是一个数组
  • 所以我收到了这个错误ERROR TypeError: Cannot read property 'number' of undefined
  • 是否受到打击?尝试解析。
【解决方案3】:

我在这里大胆猜测一下,html 是在请求​​解决之前呈现的。尝试将插值包装在 ngIf 块中

<div *ngIf="state">
 {{state.number}}°
</div>

console.log 在收到时会相应地更新值,但尝试渲染时的 html 没有值。

【讨论】:

  • 如何将&lt;div&gt; 放入load() 方法中
  • 你不能,我以为你是想把它输出成html,
  • 你可以把&lt;html&gt;放在JS里面,除非它是React,不幸的是它是Angular
【解决方案4】:

您的请求返回带有参数的对象列表(日期、状态 ID、数字、用户 ID)。

如果你只想得到一个结果:

  this.state = data[0];// this will get first element of the list

在html中你可以使用{{state.number}}

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2021-06-11
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 2021-07-15
    相关资源
    最近更新 更多