2017-09-21 26 views
0

私はいくつかのデータを表示するためにサービスchartFactory.chartDataプロパティを使用しているコントローラを持っています。問題は、chartFactory.chartData関数がバックエンドからデータを返す時間がある前に、ファクトリがオブジェクトを返すため、プロパティが定義されていないということです。angularJSサービスオブジェクトのプロパティが定義されていません

これは非同期の問題だと私は理解していますが、ファクトリとコントローラ間でどのように処理するかはわかりません。

chartFactory.js

app.factory('chartFactory', ['$http', '$interval', function($http, $interval) { 
 
    var service = { 
 
    get chartData() { 
 
     $http.get('/portfolio/get-chart-data') 
 
     .then(function(response) { 
 
      console.log(response.data, 'response data') //logging after undefined message 
 
      return response.data 
 
     }) 
 
    } 
 
    } 
 
    return service 
 
}])

chartController.js

app.controller('chartCtrl', function($scope, $timeout, $http, chartFactory) { 
 
    $scope.chartData = chartFactory 
 
     $scope.height_chart = window.innerHeight * 0.4 
 
     $scope.labels = chartFactory.chartData[0]; //undefined 
 
     $scope.series = chartFactory.chartData['GDAX Value']; //undefined 
 
     $scope.data = [ 
 
     chartFactory.chartData[1] //undefined 
 
     ]; 
 
     $scope.onClick = function(points, evt) { 
 
     console.log(points, evt); 
 
     }; 
 
     $scope.datasetOverride = [{ 
 
     yAxisID: 'y-axis-1' 
 
     }]; 
 

 
     $scope.options = { 
 
     responsive: true, 
 
     maintainAspectRatio: false, 
 
     scales: { 
 
      yAxes: [{ 
 
      id: 'y-axis-1', 
 
      // type: 'linear', 
 
      display: true, 
 
      position: 'left', 
 
      ticks: { 
 
       beginAtZero: false, 
 
       callback: function(value, index, values) { 
 
       if (parseInt(value) >= 1000) { 
 
        return '$' + value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); 
 
       } else { 
 
        return '$' + value; 
 
       } 
 
       } 
 
      } 
 
      }], 
 
      xAxes: [{ 
 
      display: false 
 
      }] 
 
     } 
 
     } 
 
})

答えて

0

あなたのコントローラを変更するよう、

chartFactory.chartData().then(function(response) { 
    $scope.labels = getchartData .response.data[0]; 
    $scope.series = chartFactory.response.data['GDAX Value']; 
}); 
+0

これは、1ページのアプリケーションのタブを切り替えると、チャートが毎回リロードされるため、これが最適な解決策ではないと私は思います。私はコントローラのデータが工場データにバインドされているソリューションを希望します。工場データが変更された場合、コントローラのデータはゼロからロードせずに変更されます。それは理にかなっていますか? – chuckieDub

+0

これは私が求めていることです...私に見せてもらえますか? pls – chuckieDub

+0

@chuckieDub答えを確認する – Sajeetharan

関連する問題