2015-12-27 104 views
0

我正在使用angular-fullstack來創建應用程序。在我的應用程序,我使用Yelp API來獲取搜索結果,我想在一個變量來存儲(注:this.searchTerm通過一個NG-模型改變了HTML):Angular 2 Promises?

'use strict'; 

(function() { 

class MainController { 

    constructor($http) { 
    this.$http = $http; 
    this.awesomeThings = []; 
    this.searchTerm = ""; 
    this.data = []; 
    } 

    addThing() { 
    this.$http.get('/api/messages/city/' + this.searchTerm).success(function(res){ 
     this.data = res; 
    }); 
    }; 
} 

angular.module('nightlifeApp').controller('MainController', MainController);})(); 

當我做所以,我得到一個錯誤,this.data沒有定義。我知道這是對異步調用的性質做的,但我該如何解決這個問題?

由於

+0

你如何調用addThing()方法? –

+0

它通過在HTML中的按鈕上單擊鼠標來調用。 – svsav

回答

0

this關鍵字將在嚴格模式下.then函數內不確定的。設置一個局部變量來引用then函數中的this綁定。

'use strict'; 

(function() { 

class MainController { 

    constructor($http) { 
    this.$http = $http; 
    this.awesomeThings = []; 
    this.searchTerm = ""; 
    this.data = []; 
    } 

    addThing() { 
    var self = this; 
    this.$http.get('/api/messages/city/' + this.searchTerm).then (function(res){ 
     self.data = res.data; 
    }); 
    }; 
} 

angular.module('nightlifeApp').controller('MainController', MainController);})(); 

另外,.success方法是棄用。改爲使用.then