Ich versuche, einen Ajax-Anruf über $http
Service in einem benutzerdefinierten Dienst zu tun. Dann möchte ich in meinem Controller die Daten anpassen, die im benutzerdefinierten Dienst empfangen werden.Angular Async-Dienst
Ich wickeln die Customizing-Datenfunktion innerhalb $interval
in der Steuerung: Auf diese Weise kann ich meine Daten anpassen, wenn es empfangen wird.
Das Problem ist: Während die Daten korrekt in dem Dienst angemeldet sind, der Service scheint, wie es nichts zurückliefert, obwohl es (return response.data.Items
)
$interval
Schleifen unbegrenzt So hätte zurückgeben sollen, und ich kann meine Daten nicht anpassen.
var myApp = angular.module('MyApp', []);
myApp.service('ajaxcall', ['$http', function($http) {
this.getjson = function() {
$http.get("http://localhost:3000/one")
.then(function(response) {
console.log(response.data.Items); //data logged correctly
return response.data.Items;
});
}
}])
.controller('MyCtrl', ['$scope', '$interval', 'ajaxcall', function($scope, $interval, ajaxcall) {
var new_items = ajaxcall.getjson();
customize_data = $interval(function() { //loops indefintely, new_items=undefined, why?
if (new_items) {
// customize data
}
}, 200);
for(var i=0; i<new_items.length; i++) {
$scope.items.push(new_items[i]);
}
}]);
Sie könnten sagen: Verschieben Sie einfach die benutzerdefinierte Datenfunktion im benutzerdefinierten Dienst. Zuerst möchte ich es nicht tun. Zweitens macht es nicht einmal Sinn: Der $ scope ist in einem Service nicht verfügbar, also sollte ich in jedem Fall auf die $ http-Antwort warten.
Verwendung Versprechen in Ihrem Dienst nutzt –