【问题标题】:Object's property is undefined when accessing it through computed props通过计算道具访问对象时,对象的属性未定义
【发布时间】:2021-06-10 12:54:21
【问题描述】:

我遇到了一个问题,当我尝试通过 compted 属性访问对象的属性时,它是未定义的。对象设置为异步。

有两点需要澄清:

1- 当我将对象记录到计算函数内的控制台时-> 属性(状态)已设置。但是当我记录属性本身时,它是未定义的。

  computed: {
    propA() {
      console.log(this.booking);
       // { state: "Draft", product: (...) }
      console.log(this.booking.state);
       //undefined
      console.log(this.booking.product);
       //"Product abc"
  }
}

2- this.booking.state 通过v-model 正确绑定到视图。

booking设置如下:

 props: {
    currentBooking: Object,
  },
  data() {
    return {
      booking: Object,
    };
  },
  async mounted() {
    this.booking = { ...this.currentBooking }; // {product: "Product abc"}
    this.booking.state =  "Draft";
}

【问题讨论】:

  • booking 属性是如何定义的?
  • 你试过 vue 开发工具了吗?有什么分析可以提吗?
  • 我已经更新了问题

标签: vue.js


【解决方案1】:

由于数据设置为异步,因此在记录时属性为undefined。您在记录对象时看到它的唯一原因是控制台能够更新对象/数组。当您单击对象以查看属性时,它会自行更新以显示 当前 值。

这仅适用于引用(如对象/数组),因为控制台使用该引用来更新自身。

因此,当您记录非对象属性时,您会看到记录时的数据:undefined。但是,当您记录对象,然后单击展开属性时,您会看到现在的数据。

【讨论】:

  • 但是它两次记录对象,第一次没有任何道具,因为数据是通过“道具”获取并提供给组件的。
  • 好的,这有什么变化?我想你说它已经在工作了,所以我想你想解释一下控制台
  • 我的意思是,计算函数也是在设置对象之后调用的,因此它应该定义属性“状态”。
  • 在设置state 属性之前调用计算,当子组件第一次渲染时。然后异步数据进来,设置state属性,再次调用computed。
  • jsfiddle.net/sh0ber/re1axqsp - 检查控制台
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 2022-01-10
  • 2013-06-06
  • 2018-01-22
相关资源
最近更新 更多