2017-08-08 91 views
0

我是AngularJS和d3的新手。我用過這個例子:http://embed.plnkr.co/6t5bky/ 並試圖創建一個'bulletChart'。AngularJS與nvD3服務不返回值

我的JavaScript文件看起來像如下:

var app = angular.module('plunker', ['nvd3']); 
app.controller('MainCtrl', function($scope, $http) { 
    $scope.options = { 
      chart: { 
       type: 'bulletChart', 
       transitionDuration: 500, 
      } 
     }; 

     $scope.data = populateData(); 

     function populateData(){ 

      /*return { 
      "title": "Test Title", 
      "subtitle": "Completed", 
      "ranges": [200,400,700], 
      "measures": [600], 
      "markers": [300] 
      }*/ 

      return $http.get('http://myservice/data').then(function(response) { 
        console.log('response-dataNew',response.data); 
        return response; 
        ;}) 

       } 

}); 

,當我返回值(在代碼註釋),它的工作原理。

return { 
      "title": "Test Title", 
      "subtitle": "Completed", 
      "ranges": [200,400,700], 
      "measures": [600], 
      "markers": [300] 
      } 

,我看到了bulletGraph:

enter image description here

當我嘗試使用它沒有給我圖的服務。我的服務(http://myservice/data)在精確相同的格式返回數據:

enter image description here

enter image description here

我到底做錯了什麼?任何指針?

+2

嘗試在您的服務成功回調中將$ scope.data設置爲'$ scope.data = response.data' –

+2

不會$ http.get返回承諾?如果是的話,populatedata返回未解決的承諾,但不是來自請求 – StackOverMySoul

+1

的數據相信問題是'返回$ http',因爲'$ http'返回承諾。嘗試刪除返回和/或將響應數據綁定到'$ scope'變量'.then(function(response){$ scope.someVariable = angular.copy(response.data);});' –

回答

0

遵循所有意見,此解決方案爲我工作。

var app = angular.module('plunker', ['nvd3']); 
app.controller('MainCtrl', function($scope, $http) { 
    $scope.options = { 
      chart: { 
       type: 'bulletChart', 
       transitionDuration: 500, 
      } 
     }; 

     $scope.data = populateData(); 
     function populateData(){ 

      $http.get('http://10.20.26.90:5003/bullet').then(function(response) { 
        console.log('response-dataFound',response.data); 
        $scope.data = angular.copy(response.data); 
        ;}) 

       } 

}); 

如果您想到更好的方法,請告訴我。