2017-09-21 1 views
0

Ich habe einen Controller mit einem Service chartFactory.chartData Eigenschaft, um einige Daten zu sehen. Das Problem besteht darin, dass die Factory das Objekt zurückgibt, bevor die chartFactory.chartData-Funktion Zeit hat, die Daten vom Back-End zurückzugeben, sodass die Eigenschaft nicht definiert ist.angularJS Service-Objekt-Eigenschaft undefined

Ich verstehe, dass dies ein asynchrones Problem ist, aber ich bin nicht sicher, wie man es zwischen einer Fabrik und einem Controller behandelt.

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 
 
      }] 
 
     } 
 
     } 
 
})

Antwort

0

ändern Controller wie

+0

Ich glaube nicht, dass dies die beste Lösung ist, denn jetzt, wenn zwischen Tabs in der Ein-Seite-App umgeschaltet wird, wird das Diagramm jedes Mal neu geladen. Ich möchte eine Lösung, bei der die Steuerungsdaten an die Fabrikdaten gebunden sind. Wenn sich die Fabrikdaten ändern, ändern sich die Steuerungsdaten, ohne von Grund auf neu geladen zu werden. Ist das sinnvoll? – chuckieDub

+0

das ist was ich frage ... kannst du es mir zeigen? pls – chuckieDub

+0

@chuckieDub überprüfen Sie die Antwort – Sajeetharan

Verwandte Themen