鍍金池/ 問(wèn)答/HTML/ v-for使用computed獲取不到數(shù)據(jù)

v-for使用computed獲取不到數(shù)據(jù)

<Select v-model="pageParam.data.state" @on-change="getCityList" style="width:140px" placeholder="請(qǐng)選擇省份">
  <Option v-for="item in provinceList" :value="item.areaId" :key="item.areaId">{{ item.areaName }}</Option>
</Select>
computed: {
  provinceList: () => {
    util.getProvinceList()
      .then(data => data)
      .catch(err => {
        this.$Message.error('獲取省份列表失敗')
        return []
      })
  }
}

我使用的iView + Vue,上面的代碼,data數(shù)據(jù)能正常返回,但是下拉框卻是空的,為什么?。?/p>

回答
編輯回答
櫻花霓

computed中的計(jì)算屬性需要有一個(gè)返回值,你這里看似有返回值,但是返回到哪里去了?

無(wú)論是then還是catch中的返回都是傳遞到Promise的下一個(gè)狀態(tài)中,不能作為provinceList的返回值,就是不拿es6的Promise來(lái)說(shuō),函數(shù)嵌套,內(nèi)層函數(shù)的返回值也不會(huì)作為外層函數(shù)的返回值返回出去

你這個(gè)可以在鉤子函數(shù)中請(qǐng)求到數(shù)據(jù)后,在賦值到provinceList上去

2017年7月9日 10:17
編輯回答
未命名

承接上面的第一句,computed中的計(jì)算屬性需要有一個(gè)返回值,
首先如果數(shù)據(jù)請(qǐng)求成功的話走的是then不會(huì)進(jìn)入到catch里面。你在then里面幾乎什么都沒(méi)有干。而且如果你在promise里面返回的話。不僅不能當(dāng)做計(jì)算屬性provinceList的返回值。而且return是作為下一個(gè)then的res使用的。而且你并沒(méi)有用。所以你的provinceList也只是個(gè)聲明狀態(tài)

2017年9月1日 04:10