Vue-Router:无法读取属性' $ route'未定义的 - VueJS

时间:2017-11-09 11:29:11

标签: vue.js vuejs2 vue-router nuxt.js

请查看我的代码。

<template>
  <div class="row flex">
    <div class="col-md-6 home_feed">
      <post-detail :posts="posts"></post-detail>
    </div>
  </div>
</template>
<script>
  import axios from 'axios'
  export default {
    async asyncData (params) {
      let { data } = await axios.get('http://localhost:8000/api/v1/users/' + this.$route.params.id + '/')
      return {
        posts: data
      }
    },
    components: {
      'post-detail': Item
    }
  }
</script>

我收到此错误:Cannot read property '$route' of undefined当我从params.id asyncdata时,但是当我输入:console.log(this。$ route.params.id)时,它就是正确的。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

如果要在已安装的生命周期中从服务器(来自浏览器)加载数据,请尝试以下命令:

export default {
  data() {
    return {
      data: {}
    }
  },

  mounted() {
    this.asyncData();
  },

  methods: {
    async asyncData ({ route }) {
     let { data} = await axios.get('http://localhost:8000/api/v1/users/' + this.$route.params.id + '/')
     this.data = data
   }
  }
}

来自服务器的响应将在response变量中提供。

对于SSR,你可以这样做:

async asyncData ({ store, route }) { 
  let { data} = await axios.get('localhost:8000/api/v1/users/'; + route.params.id + '/') 
  return {
    posts: data
  }
}
在实例化组件之前将调用

asyncData,并且它无法访问this。 (有关详细信息,请参阅https://ssr.vuejs.org/en/data.html 与组件的逻辑配置

答案 1 :(得分:0)

@Mikhail 这段代码很成功:

export default {
  data() {
    return {
      data: {}
    }
  },

  mounted() {
    this.asyncData();
  },

  methods: {
    async asyncData ({ route }) {
     let { data} = await axios.get('http://localhost:8000/api/v1/users/' + route.params.id + '/')
     this.data = data
   }
  }
}

但是,当获取这样的API父子数据时:{{data.user.username}} data.user未定义。因此API数据会出错。

我使用Nuxt并且您的SSR代码不起作用: 错误:无法读取属性$ route of undefined

<script>
async asyncData ({ store, route }) { 
  let { data} = await axios.get('localhost:8000/api/v1/users/'; + this.$route.params.id + '/') 
  return {
    posts: data
  }
}
</script>

答案 2 :(得分:0)

对于SSR,您可以更改

  <script>
  async asyncData ({ store, route }) { 
   let { data} = await axios.get('localhost:8000/api/v1/users/'; +   
   this.$route.params.id + '/') 
   return {
   posts: data
   }
}
</script>

  <script>
  async asyncData ({ route }) { 
   let { data} = await axios.get('localhost:8000/api/v1/users/'; +   
   route.params.id + '/') 
   return {
   posts: data
   }
}
</script>

根据nuxt教程,您无法访问asyncData内部的 this ,因为它是在启动组件之前调用的。 Nuxt Documentation