2016-12-09 15 views
4

vue.jsとimを使ってLaravel 5.3にアプリケーションを構築し、vue.jsに移動してページを動的にしました。私はそうコンポーネントに私は次のエラーを取得するそうした後、それを超える変換したい単一のページに取り組んですべてのものを得た:vuejs v2.0コンポーネントにデータを渡す

[Vue warn]: Error when rendering component <homepage> at C:\xampp\htdocs\....... 
TypeError: Cannot read property 'nxt_weekly' of undefined 

私はそうのようなビューにデータを渡すました:

const app = new Vue({ 
el: '#app', 

mounted: function() { 
    this.fetchEvents(); 
}, 

data: { 
    loading: true, 
    stats: [] 
}, 

methods: { 
    fetchEvents: function() { 
     this.$http.get('home/data').then(function (response) { 
      this.stats = response.body; 
      this.loading = false; 
     }, function (error) { 
      console.log(error); 
     }); 
    } 

}); 
私はそうのように私の見解では、それらすべてを呼び出してAPIからのJSONレスポンスを保持している統計で

[]は次のとおりです。

<span class="stat" v-text="'stats.nxt_today'"></span> 
.... 
.... 

これは動作しますが、私はエラーがAB記載されているコンポーネントの作成に切り替えるとき新しいコードは、

Vue.component('homepage', require('./components/Homepage.vue'),{ 

    mounted: function() { 
     this.fetchEvents(); 
    }, 

    data: function() { 
     return{ 
      loading: true, 
      stats: [] 
     } 
    }, 


    methods: { 
     fetchEvents: function() { 
      console.log('running here'); 
      this.$http.get('home/data').then(function (response) { 
       this.stats = response.body; 
       this.loading = false; 
      }, function (error) { 
       console.log(error); 
      }); 
     } 
    } 
}); 

私は間違っていますか?コンポーネントがアクセスしようとしているときに、私のstatsオブジェクトが空になったのはなぜですか?

+0

なぜ統計が配列として始まり、オブジェクトに変換されるのですか? – Stephen

答えて

9

あなたは以下に示すように、v-bindを使用してコンポーネントのプロパティとしてごstatsに合格する必要があります。

<homepage v-bind:stats="stats"></homepage> 

ルートテンプレートで行われる上記のニーズ。次のようにそして、あなたのhomepageコンポーネントでは、あなたがpropsで値を受け取ることができます。

Vue.component('homepage', { 
    props: ["stats"], 
    mounted: function() { 
     // ... 
    }, 
    // ... 
} 

を、このコンポーネントのテンプレート内では、通常stats.nxt_todayにアクセスすることができます。

ところで、あなたの統計は配列かオブジェクトですか?最初は空の配列として定義しましたが、オブジェクトとしてアクセスしています。

問題が解決しない場合は、vue-devtoolsを使用して、コンポーネント内で使用可能なすべてのオブジェクトを表示できます。

+0

新しいVueインスタンスですべてのAPIクエリを作成し、それぞれを別々のコンポーネントに渡す必要がありますか? – twigg

+0

理想的には、すべてのAPIクエリのストアを維持するには、Vuex(https://vuex.vuejs.org/en/intro.html)を使用する必要があります。 Vuexはブラウザアプリケーションのデータベースのようなものです。すべてのデータの完全な状態を維持しながら、(そのVueインスタンス内でのみ)すべてのコンポーネントに完全にアクセスできます。したがって、APIデータがVuex状態で利用可能かどうかを簡単に確認して、実際のAPI呼び出しがまだロードされていない場合はそれを行うことができます。 – Mani

+0

しかし、あなたの主な質問に答えるためには、親コンポーネントでAPIクエリを行い、それを 'props'を介して子コンポーネントに渡すことができます。それは、親から子への片方向バインディングです。あなたがVuexがあなたのアプリの過剰なものだと思うなら、間違いなくこのようにすることができます。 – Mani

関連する問題