2017-09-21 70 views
2

我試圖從一個服務中獲取一些數據到一個控制器,我不斷得到一個未定義的變量。

angular 
    .module("classes") 
    .service("MyService", function ($http) { 

     this.foo; 
     $http.get("/classes/all").then(function (response) { 
      this.fighters = response.data; 
      this.foo = this.fighters; 
      console.log(this.foo); 
     }); 
     console.log(this.foo); 

    }) 

當我運行這個控制檯時,按照這個順序,第11行是未定義的,然後第9行返回數組。

而當我在控制器中嘗試獲取變量foo時,它也表示未定義。

$scope.fooFighters = MyService.foo; 

回答

3

代碼/功能的原因是因爲你的API調用的異步執行的。我建議你重寫代碼以使用將返回承諾對象的工廠。不需要帶來不必要的變量。

angular.module("classes").factory("MyService", function($http) { 
    return { 
     fighters: function() { 
      return $http.get("/classes/all").then(function(response) { 
       return response.data; 
      }); 
     } 
    } 
}) 

而在你的控制器,你可以通過引用它像

MyService.fighters().then(function(data){ 
    $scope.fooFighters = data; 
    }); 
+0

後執行http,如果添加console.log($ scope.fooFighters);在控制器之後。我首先在控制器中獲取未定義的變量,然後從服務console.log(this.fighters)獲取數組; –

+0

嘗試上面的代碼。將您的服務更改爲工廠以返回承諾對象。 – Vivz

+0

我絕對嘗試過。它在控制檯上保持日誌「undefined」 –

0

因爲在第9行工作後需要一段時間才能加載ajax/http請求數據。所以,如果你想使用Ajax/HTTP數據進行工作,那麼你應該寫內部

$http.get("/classes/all").then(function (response) { 
     // do something 
    }); 
+0

的問題是,如果我想訪問控制器通過注入控制器中的服務中獲得的價值,然後。它只會在運行控制器 –