Vue计算属性:帮助程序函数尽管已定义但仍返回未定义

时间:2019-08-22 08:38:54

标签: vuejs2 vue-component

我正在使用计算属性diameter()返回以下任一内容:
-随机数(randomise: true
-从数组(randomise: false)中的对象返回的数字。

我确实有一个可行的实现(请参阅文章底部),但想知道为什么更清洁的实现不起作用。对于randomise: falsediameter()返回undefined。为什么?

vars [
  {varName: diameter, varValue: 25.8},
  {varName: quantity, varValue: 68}
]
computed: {
  diameter() {
    if (randomise) {
      return math.randomInt(100, 1000) //no problems
    } else {
      console.log(this.populateValue('diameter')) //undefined
      return this.populateValue('diameter')
    }
  }
}
methods: {
    populateValue(variableName) {
      this.vars.forEach(element => {
        if (element.varName === variableName) {
          console.log(element.varValue) //25.8
          return element.varValue
        }
      })
    }
  }

以下实现有效,但是为什么要创建一个任意属性呢?

diameter() {
  if (!this.vars || !this.passVars) {
    return math.randomInt(100, 1000) / (10 ** math.randomInt(0, 3))
  } else {
    this.populateValue('diameter')
    return this.blah
  }
}
populateValue(variableName) {
  this.vars.forEach(element => {
    if (element.varName === variableName) {
      this.blah = element.varValue
    }
  })
}

1 个答案:

答案 0 :(得分:1)

问题是return element.varValueforEach返回,而不是populateValue

有多种写法。例如

for (const element of this.vars) {
  if (element.varName === variableName) {
    return element.varValue
  }  
}

通过使用for / of循环,没有内部函数,因此return从您期望的函数中返回。

替代方法包括:

let value = null

this.vars.forEach(element =>
  if (element.varName === variableName) {
    value = element.varValue
  }  
})

return value

或:

const match = this.vars.find(element =>
  return element.varName === variableName
})

if (match) {
  return match.varValue
}