1

我似乎被困在试图return从另一个计算属性内部的一个计算属性中调用值。

这是我的代码到目前为止的样子:

  computed: {
    myTime() {
      var date = new Date(this.myData.doc[9].time);
      return date.toString("YYYY MMM dd hh:mm").substring(0,24);
    },

    myName() {
      return this.$store.getters.findName(this.id)
    },

    series() {

      var series =  [
        {
          name: "TMP",
          data: [28, 29, 33, 36, 32, 32, 33]
        },
        {
          name: "HUM",
          data: [12, 11, 14, 18, 17, 13, 13]
        },
        {
          name: "CO2",
          data: []
        }
      ];

      for (var i = 0; i < 10; i++) {
        series[2].data.push(((this.myData.doc[i].co2*10)*100)/3000);
      }

      return series;
    },

    myData() {
      return this.$store.state.graphData.find(obj => obj.id == this.id)
    },

    ...mapGetters({
    }),

    ...mapState({
      newSettings: 'newSettings',
      graphDatagraphData'
    }),
  }

我正在做的是尝试根据这个例子绘制图表:https ://apexcharts.com/vue-chart-demos/line-charts/data-labels/

因为我想通过每隔几秒更新一次的实时提要动态更改这些数据,所以我已经移动了series包含对象的数组,以便在图表上从data()函数到computed:属性列表制作更多线条。

是的,我对此进行了测试,移动后未更改,图表效果很好。

我的问题出现在我尝试myData从计算属性中引用计算series属性的地方。无论我如何)尝试它(this.myData, this.myData(), myData, myData()),它总是以未定义的形式返回。

我觉得这很不寻常,因为在前面的计算属性中myTime,我引用this.myData.doc[].xxx没有问题。

是的,这可能属于该this.$store.getters部分,但我想知道为什么在调用和计算属性this.myData之间存在差异。myTimeseries

myData属性类似于:

{
  id: "xxxxxxxxxxxxxx",
  doc: [
    {co2: 1800, tmp: 20, hum: 50},
    {co2: 1800, tmp: 20, hum: 50},
    {co2: 1800, tmp: 20, hum: 50},
    {co2: 1800, tmp: 20, hum: 50},
    {co2: 1800, tmp: 20, hum: 50},
    {co2: 1800, tmp: 20, hum: 50},
  ]
}

所以它应该工作的方式是doc从内部迭代数组myData,提取 co2 值,并将其推送到series[i].data图表将识别它的适当数组。

感谢所有建设性的意见!

4

2 回答 2

2

其实,我想通了。我真的不知道为什么 Abdelhak 的回答有效,但我发现了真正导致问题的原因。

myData 在 http 请求之后定义,从 mongo 获取数据,返回该数据。所以发生了什么,即使请求在几毫秒后完成,但在我尝试使用该数据时,它并不存在。

我通过在模板中添加 div 来修复它,如下所示:

<template lang="html">
    <div v-if="myData">Do everything I want</div>
    <div v-else>Loading Data</div>
</template>

很简单……抱歉打扰你了XD

于 2019-03-10T20:59:17.007 回答
0

你可以在循环之前引用它

` let self=this; 
  for (var i = 0; i < 10; i++) {
    series[2].data.push(((self.myData.doc[i].co2*10)*100)/3000);
  }`
于 2019-03-10T05:12:28.767 回答