【问题标题】:computed property not reading data initialized in created计算属性未读取在 created 中初始化的数据
【发布时间】:2018-07-20 09:26:13
【问题描述】:

我不确定计算属性(在 vue 生命周期中)何时到来。假设我有一个在 created() 中运行的方法:

created () {
  getSomething()
}

在 getSomething() 中,我获取数据并将我的数据属性填充为:

getSomething(){
 axios.get(...) { this.info = response.data }
}

现在,在计算属性中,我这样做了:

computed: {
  doSomething () {
    this.info.forEach(item => {})
 }
}

但是,在我的计算中,我得到 forEach 是未定义的,好像 this.info 不是一个数组或没有被填充。

我做错了什么?是在 created() 之前调用的计算道具还是什么?

【问题讨论】:

  • getSomething 应该用这个关键字this.getSomething() 调用。 axios.get() 返回承诺,我猜你已经在数据对象上初始化了 this.info,所以数据默认是响应式的。差点忘了,计算属性期望返回一些东西:)

标签: vue.js vuejs2


【解决方案1】:

试试这样的

getSomething(){
 return axios.get(...) { this.info = response.data }
}

那么你可以像这样使用创建方法中返回的承诺......

created () {
  getSomething().then( () => {
    doSomething()
  }}
}

【讨论】:

    【解决方案2】:

    你可以利用Vuex'状态管理...

    Vuex 有:

    • 调度

    • 操作

    • 突变

    • 吸气剂

    我的想法是,在您的页面加载时,将action 映射到调用您的axios 服务的商店,并在它返回后,commit 存储对商店的响应的突变。 .. 然后您可以将状态映射到您的组件并检索数据。

    这可能不是最快的答案,但如果您预计需要来自 axios 请求的响应数据,则可能值得将其放入某种状态管理中 :-)

    【讨论】:

      猜你喜欢
      • 2020-09-20
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      • 2016-12-12
      相关资源
      最近更新 更多