web-dev-qa-db-ja.com

Vue残りのAPIからのテンプレートコンポーネントにテーブルを入力します

Vueコンポーネントでrestapi(axiosを使用)データを取得してテーブルにデータを入力しようとしています。rest呼び出しは有効なjson文字列をchromeで返します。ただし、取得できません。ビューを実行すると、REST呼び出しで次のエラーが発生します。

TypeError:未定義のプロパティ「コース」を設定できません

返されるjsonは次のとおりです。

[{"CourseId": "architecture"、 "AuthorId": "cory-house"、 "Title": "Architecting Applications"、 "CourseLength": "4:20"、 "Category": "Software Architecture Test"}]

これが私のテンプレートです:

<template>
  <div class="course-list-row">
    <tr v-for="course in courses">
        <td>{{ course.CourseId }}</td>
        <td>{{ course.AuthorId }}</td>
        <td>{{ course.Title }}</td>
        <td>{{ course.CourseLength }}</td>
        <td>{{ course.Category }}</td>
    </tr>
  </div>
</template>

<script>
  import axios from 'axios'
  export default {
    name: 'course-list-row',
    mounted: function () {
      this.getCourses()
      console.log('mounted: got here')
    },
    data: function () {
      return {
        message: 'Course List Row',
        courses: []
      }
    },
    methods: {
      getCourses: function () {
        const url = 'https://server/CoursesWebApi/api/courses/'
        axios.get(url, {
          dataType: 'json',
          headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json'
          },
          mode: 'no-cors',
          credentials: 'include'
        })
        .then(function (response) {
          console.log(JSON.stringify(response.data))
          this.courses = JSON.stringify(response.data)
        })
        .catch(function (error) {
          console.log(error)
        })
      }
    }
  }
</script>

編集:

Apiコールバック関数のthis.coursesの「this」が未定義のようです。

7
steveareeno

編集すると、正しいエラーが発生します。この範囲はaxios.get内で変更されています。次の変更を行う必要があります:

methods: {
  getCourses: function () {
    var self = this
    const url = 'https://server/CoursesWebApi/api/courses/'
    axios.get(url, {
      dataType: 'json',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      },
      mode: 'no-cors',
      credentials: 'include'
    })
    .then(function (response) {
      console.log(JSON.stringify(response.data))
      self.courses = response.data
    })
    .catch(function (error) {
      console.log(error)
    })
  }
}
5
Saurabh