0

Also, ich bin neu zu angularjs. Ich möchte MVC-Struktur verwenden. Also dachte ich, dass ich die Antwort von PHP in meinem Dienst speichern und sie dann in meinem Controller verwenden würde.php Antwort in angularjs Service speichern, dann bekommen sie in Controller

Service:

(function() { 
    angular.module('dataService').service("incidentService", function ($http) { 
    var Data = []; 

    return ({ 
     getData: __getData 
    }); 


    function __getData() { 
     return Data; 
    } 

    function __setData($http, $q) { 
     var defer = $q.defer(); 
     $http.get('PHP/NAME.php',{cache : 'true'}). 
     success(function(data){ 
      Data = data; 
      console.log(Data); 
      defer.resolve(data); 
      defer.promise.then(function(data){ 
       Data = data; 
       console.log(Data); 
      }); 
     }); 
    } 
})})(); 

Controller:

(function() { 

angular.module('app') 
    .controller('Ctrl', Ctrl); 

/** @ngInject */ 
function Ctrl($scope, $http, $q,baConfig, incidentService) { 

    incidentService.setData($http,$q) 

    var DataSet = incidentService.getData(); 
    console.log(DataSet); 
} 
})(); 

Durch diese Art und Weise zu tun, das Problem ist mein dataSet nicht aktualisiert, wenn das Datenfeld in meinem Dienst aktualisiert wird. Ich weiß, dass wir ein Verspätungsversprechen an den Controller zurückgeben können, um die Daten zu erhalten, aber können wir die Daten zuerst im Dienst setzen und dann die get-Methode verwenden, um sie zu verwenden?

+0

können Sie den gesamten Definitionen für den Service und die Steuerung schreiben. Es gibt einige grundsätzliche Fehler im obigen Code und es wäre besser, alles zu sehen. –

+0

Auch nicht sicher, welche Version von Angular Sie verwenden, aber der Erfolg ist veraltet. Benutze dann wie ich unten habe. –

Antwort

0

OK, ich denke, das größte Problem mit, warum dies nicht funktioniert, ist, weil Sie die Daten, die von dem $ http-Aufruf an nData zurückgegeben werden, statt nur Daten zugewiesen.

Das nächste Problem ist, dass für den Dienst keine getMonthlyData-Methode definiert ist.

Das gesagt, das sieht zu kompliziert aus.

Ihr Dienst sollte wie folgt aussehen:

(function() { 
    angular.module('dataService').service("incidentService", function ($http,$q) { 
    var service  
    service.getData = __getData() 
    return service 

    function __getData() { 
     if (!service.Data) { 
     return $http.get('PHP/NAME.php',{cache : 'true'}).then(function(data) { 
      service.Data = data 
      return $q.when(service.Data) 
     })} 
     else { 
      return $q.when(service.Data) 
     } 
    } 
})})(); 

Dann in Ihrem Controller Sie nur die Daten erhalten über incidentService.getData()

+0

Vielen Dank. Das getMonthlyData() ist ein Tippfehler. Es sollte getData() sein. Ich habe noch eine Frage. Wie sollte ich Daten speichern, die ich im Service bekomme? –

+0

Ich speichere es in der Eigenschaft data. return $ q.when (service.Data) verwendet die zwischengespeicherten Daten bei nachfolgenden Aufrufen. In beiden Fällen handelt es sich um ein Versprechen, sodass Sie in Ihren Controllern incidentService.getData() verwenden können, um sie zu referenzieren, oder in Fällen, in denen Sie wissen, dass der Service aufgerufen wurde, können Sie einfach auf incidentService verweisen .Daten. –

+0

Danke. Was passiert, wenn ich mehrere Arrays in meinem Dienst speichern möchte? –

Verwandte Themen