首页 文章

在数据加载之前,对Vue进行渲染

提问于
浏览
2

我正在使用Vue和Vue路由器 . 常见的问题是加载显示某种外部资源的组件时需要进行异步加载 .

假设我有一个简单的Vue组件,它显示从外部仓库加载的帖子的 Headers :

<template>
  <div>
    {{ post.title }}
  </div>
</template>

<script>
export default {
  data () {
    return {
      post: null
    }
  },

  route: {
    waitForData: true,
    data () {
      return postRepo.fetch(this.$route.params.id)
      .then(post => {
        return {post: post}
      })
      .catch(err => { console.warn(err) })
    }
  }
}
</script>

我的路径 data 方法返回一个promise,当解析时返回插入到组件数据中的post对象 .

一切正常,一旦帖子加载,帖子 Headers 就显示在页面中,但控制台会发出警告:

[Vue警告]:评估表达式“post.title”时出错:TypeError:无法读取null的属性'title'

问题是Vue试图在设置帖子之前渲染模板 . 在解决 route.data() 方法之前,有没有办法阻止模板渲染(这是我认为 waitForData 的用途)?

我知道我可以使用 v-if 但是如果可能的话我想避免过多的DOM操作 .

1 回答

相关问题