javascript - Vue2 如何异步加载数据?
PHPz
PHPz 2017-04-11 10:38:46
[JavaScript讨论组]

我需要在模板编译前进行2次异步操作。

methods: {
      getResults(){
        return new Promise(resolve => {
          if (this.$store.state.results) {
            this.results = this.$store.state.results
            resolve()
          }
          else {
            const q = this.$route.query.q
            this.$http.get('search/', {params: {q: q}}).then(response => {
              this.$store.commit('postResults', {results: response.data.results, count: response.data.count})
              resolve()
            })
          }
        })
      },
      getDetail(){
          return this.$http('vendor/detail/',{params:{
              doc:id
          }})
      }
    },
beforeMount(){
    this.getResults().then(this.getDetail).then((response)=>{
       this.detail=response
     })
  },

现在的情况是,getDetail执行完后模板就开始编译了。。求大神解答:(

PHPz
PHPz

学习是最好的投资!

全部回复(1)
迷茫
这里是模板
li(v-for="result,idx in results" ,:key='result')
 span {{result.name}}                 
 span {{details[idx].id}}
在这里加载数据
 beforeMount(){
      const searchInfo = this.getSearchInfo()
      this.$store.dispatch('getSearchResults', searchInfo).then(()=>this.$store.dispatch('getSearchDetail'))
    }
这里是action
   getSearchDetail({ state, commit }) {
      const arr = state.results.map(result => axios.get('vendor/detail/', {
        params: {
          doc: result.doc.id,
        },
      }))
      return Promise.all(arr).then((response) => {
        const details = response.map(detail => detail.data)
        commit('postDetails', { details })
      })
    },

这样做的结果是vue.common.js?e881:433 TypeError: Cannot read property 'id' of undefined(…)

但是我发现,如果我把模板的这里

h3(:class='$style.business') {{details[idx].id}}

改为

h3(:class='$style.business') {{details[idx]}}

这样做页面可以顺利渲染

有点不解,希望能解答.. 谢谢


问题应该在这:

v-for依赖的是第一次异步的结果results,但是模板却需要渲染第二次异步才能获取到detail..


我是这么搞的:

li(v-for="result,idx in results" ,:key='result')
 span {{result.name}}              
 span(v-if='details') {{details[idx].id}}

有点不优雅,但是解决了。有优雅的解决方案吗

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号