2016-03-22 8 views
0

Ich verwende Vue-Ressource und versuche, einen AJAX-Aufruf basierend auf den (angeblich gebundenen) Daten zu machen, die von einem früheren AJAX-Aufruf stammten.Vue-Ressource-AJAX-Daten übergeben um

Ich versuche, die Daten von einem Aufruf/me an die userDetails prop zu binden (scheint gut zu funktionieren), und die userDetails.id in die nächste Funktion übergeben (this.fetchMyProjects()), die Benutzer-Projekte zu erhalten. (funktioniert nicht).

Wenn ich eine ID fest in this.fetchMyProjects() binde bindet es gut, das Problem ist der Verweis auf das Objekt this.userDetails - es ist undefined in diesem Zusammenhang.

Ich verstehe nicht, warum ich nicht auf eine Eigenschaft zugreifen kann, von der ich glaube, dass sie gebunden ist. Kann mir jemand eine Anleitung geben, was ich falsch mache?

Code:

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

es könnte ein Problem der Zeit sein. 'vue-resource' Aufrufe sind asynchron. Wenn Ihre' fetchMyProjects' vom Ergebnis Ihrer 'fetchMyUserDetails' Funktion abhängen, würde ich sie im Callback der ersten Funktion aufrufen, um sicherzustellen, dass Ihre Benutzerdaten gesetzt sind. –

+0

Danke! Verketten der 'fetchMyProjects' Funktionsaufruf in dort funktioniert. –

Antwort

0

Sie ein verlegtes ) haben. .bind() muss auf die Funktion direkt aufgerufen werden, in diesem Fall auf dem }:

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

Das funktionierte:

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); 

    }, 


} 

});