2017-04-06 11 views
1

残りのAPIからデータを取得しようとしています。ただし、this.someDataの結果は未定義のままです。残りのAPIからデータを返します

<template> 
    <div class="list"> 
    <h1>List</h1> 
    <pre>msg: {{msg}}</pre> 
    </div> 
</template> 

<script> 
    import Vue from 'vue' 
    import VueResource from 'vue-resource' 
    Vue.use(VueResource) 

    export default { 
    name: 'list', 
    data() { 
     this.$http.get('http://localhost:8080/api/posts/filter?username=tons').then(response => { 
     // get body data 
     this.someData = response.body 
     console.log(this.someData) 
     }, response => { 
     // error callback 
     }) 

     return { 
     msg: this.someData + 'somedata' 
     } 
    } 
    } 
</script> 

誰もが私が間違ってやっているかについての手掛かりを持って次のように

私のコンポーネントがありますか?

+0

ブラウザで 'http:// localhost:8080/api/posts/filter?username = tons'に行くと結果が表示されますか? – dave

答えて

1

'data'は単なるプロパティでなければなりません。何かを取得した後、あなたの 'データ'プロパティを設定する 'メソッド'があります。

正しいコードは次のようなものになります:あなたは「データ」で、いくつかの基本的な計算を行うことができ、権利であるが、彼らはsyncronousあるべき{{ someData }}

@Bert_Evans、あなたのテンプレートでは

<script> 
    export default { 
     data: function() { 
      return { 
       someData: null 
      } 
     }, 
     methods: { 
      getData: function() { 
       // fetch here 
       this.someData = response.body; 
      } 
     }, 
     mounted() { 
      this.getData(); // or trigger by click or smth else 
     } 
    } 
</script> 

をすることができますVueでは反応性が働くからです。

+0

オブジェクトを返す前にデータを計算するのは完全に受け入れられます。この場合ではない。 – Bert

+0

確かに、データをフェッチしません。 – wostex

+0

ここでは、Evan You(Vueの作成者)がdata()内の非同期メソッドを使用する例を示します。それはあなたのやり方のすべてです。 https://jsfiddle.net/yyx990803/kyt43L2r/ – Bert

関連する問題