2016-03-22 13 views
0

私はVueリソースを使用していて、以前のAJAX呼び出しから来た(想定されている)データに基づいてAJAX呼び出しを作成しようとしています。vue-resource AJAXデータの周りを渡す

私は(OKを動作するようです)userDetails小道具に/私への呼び出しからデータをバインドしようとすると、そのユーザのプロジェクトを取得するには、次の関数(this.fetchMyProjects())にuserDetails.idを渡しています。 (動作しません)。

私はIDをthis.fetchMyProjects()にハードコードします。それはうまくバインドされますが、問題はthis.userDetailsオブジェクトへの参照です。このコンテキストでは定義されていません。

私は縛られていると思われるプロパティにアクセスできない理由を理解していません。誰かが私が間違っていることについていくつかのガイダンスを提供できますか?

コード:

new Vue({ 
    el : 'body', 
    data : { 
     projects: [], 
     userDetails: {}, 
    }, 
    created : function(){ 

     this.fetchMyUserDetails(); 
     this.fetchMyProjects(); 

    }, 

    methods : { 

     fetchMyUserDetails : function(){ 

      this.$http.get('/me', function(resp){ 
       this.userDetails = resp.data; 
      }).bind(this); 

     }, 

     fetchMyProjects: function(){ 

      this.$http.get('/projects/user/' + this.userDetails.id, function(projects){ 
       this.projects = projects.data; 
      }).bind(this); 

     }, 


    } 

}); 
+0

が、それは時間の問題かもしれません。 'vue-resource'呼び出しは非同期ですので、' fetchMyProjects'が 'fetchMyUserDetails'関数の結果に依存する場合は、最初の関数のコールバックで呼び出すことで、ユーザデータが確実に設定されます –

+0

ありがとう! 'fetchMyProjects'関数呼び出しを連鎖してそこに働きました。 –

答えて

0

あなたは見当違い)を持っています。 .bind()}に、この場合には、直接の関数で呼び出される必要がある:

this.$http.get('/me', function(resp){ 
    this.userDetails = resp.data; 
}.bind(this)); 
0

これは働いていた:

new Vue({ 
el : 'body', 
data : { 
    projects: [], 
    userDetails: {}, 
}, 
created : function(){ 

    this.fetchMyUserDetails(); 
    // this.fetchMyProjects(); // Needed to chain it into fetchMyUserDetails() 

}, 

methods : { 

    fetchMyUserDetails : function(){ 

     this.$http.get('/me', function(resp){ 
      this.userDetails = resp.data; 

      this.fetchMyProjects(); // Works! 

     }).bind(this); 

    }, 

    fetchMyProjects: function(){ 

     this.$http.get('/projects/user/' + this.userDetails.id, function(projects){ 
      this.projects = projects.data; 
     }).bind(this); 

    }, 


} 

}); 
関連する問題