2016-05-03 8 views
1
var prom = $http.get('url'); 
prom.success(function(data){ 
    //here calling some service and updating the data 
}); 
$scope.abc = function(){ 
//doing some calculation with updated data 
} 

Sobald ich Daten von http Anfrage, ich rufe einen Dienst, der einige Informationen zu empfangenen Daten hinzugefügt. d. h. data + service() = updatedData. Nun, auf diesen aktualisierten Daten verwende ich einige Berechnungen und zeige sie in der Ansicht an. Aber dieses Ding funktioniert nicht. Ich habe versucht, diese Berechnung zu prom.success selbst hinzuzufügen, aber ich bekomme immer noch keine aktualisierten Daten. Ich versuchte setInterval() zu $ ​​scope.abc aber einige Zeit wird es irgendwann nicht angezeigt werden.Daten aus dem Versprechen Ergebnis manipulieren

Bitte helfen Sie mir, dieses Problem zu lösen.

Danke

+0

Sie haben einige Berechnung auszuführen und sie in '$ scope.xyz' Variablen speichern und wieder abgeben, dass die Daten –

Antwort

1

ein Verfahren in einem Dienst schreiben, die die Daten lösen wird. Rufen Sie in der Methode zuerst $ http auf, um die Daten abzurufen. Nachdem Sie die Daten erhalten haben, rufen Sie den 2. Dienst an, der zusätzliche Informationen hinzufügen wird. Sobald dies erledigt ist (d. H. Das Versprechen für den zweiten Dienst wurde gelöst), beheben Sie die Aktualisierungsdaten. Rufen Sie diese Methode vom Controller aus im Service auf und warten Sie, bis sie wieder gefunden wird. Wenn es wieder aufgenommen wird; "Dann" rufen Sie Ihre Methode für den Bereich auf, der die Daten anzeigt. Ich werde eine Arbeitsgeige für dich veröffentlichen.

Sie können die Geige here überprüfen.

Dienst

myApp.factory('service', function($http, $q) { 
    var addInfoToData = function(data) { 
    var deferred = $q.defer(); 
    data.updatedInfo = "Some dummy info"; 
    deferred.resolve(data); 
    return deferred.promise; 
    }; 

    //Dummy Method for $http call 
    var callApi = function() { 
    var deferred = $q.defer(); 
    var dummyData = { 
     Id: 1, 
     Name: "Fake Info", 
     Value: 15 
    }; 
    deferred.resolve(dummyData); 
    return deferred.promise; 
    } 

    var getData = function() { 
    var deferred = $q.defer(); 
    //Replace with $http 
    callApi().then(function(data) { 
     addInfoToData(data).then(function(updatedData) { 
     deferred.resolve(data); 
     }) 
    }) 
    return deferred.promise; 
    } 

    return { 
    getData: getData 
    } 
}) 

Hinweis: callApi Methode ist ein Dummy-Methode für $ http Anruf. Ersetzen Sie es durch Ihren tatsächlichen API-Aufruf.

-Controller

function MyCtrl($scope, service) { 
    $scope.name = 'Superhero'; 
    $scope.abc = function(data) { 
    data.Value = data.Value/100; 
    $scope.displayData = data; 
    } 
    var getData = function() { 
    service.getData().then(function(data) { 
     $scope.abc(data); 
    }) 
    } 

    getData(); 
} 
+0

@ user2827761 half es? Oder suchen Sie etwas anderes? –

+0

danke @Pratik Bhattacharya. Es funktioniert für mich. Wenn ich einen anderen Dienst anstelle von data.updatedInfo = "Einige Dummy-Informationen" anrufe; um Daten zu aktualisieren, gibt es Fehler .. der Dienst ist nicht definiert. Ich habe versucht, mit Abhängigkeitsinjektion richtig, aber immer noch gibt es einen Fehler. wie vielen Dank. – user2827761

+0

Ich habe das Problem nicht bekommen. Können Sie ein wenig ausarbeiten? Versuchen Sie, einen anderen Dienst zu injizieren, um den http-Aufruf zu tätigen? –