Ciao a tutti,
ho un problema nell'aggiornare una variabile dello scope di angular dopo aver effettuato delle chiamate http verso un endpoint ed aver ottenuto i risultati desiderati.
Questo è il servizio che ho scritto per realizzare le chiamate POST e GET:
app.service('ApiCall', ['$http', '$q', function ($http, $q) {
var result;
this.GetApiCall = function (url, obj, tokenId) {
var deferred = $q.defer();
var options = {
method: 'GET',
url: obj != null ? url + '?' + obj : url,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-TOKENID': tokenId
}
}
$http(options).success(function (data, status) {
deferred.resolve(data);
}).error(function (err, status) {
typeof (err) === "string" ? err = { status: status } : (err == null ? err = { status: status } : err.status = status);
console.log('error: ', err);
deferred.reject(err);
});
return deferred.promise;
}
this.PostApiCall = function (url, obj, tokenId) {
var deferred = $q.defer();
var options = {
method: 'POST',
url: url,
headers: { 'Accept': 'application/json', 'Content-Type': 'application/x-www-form-urlencoded' },
data: obj
}
if (tokenId != '') {
options.headers['Content-Type'] = 'application/json';
options.headers['X-TOKENID'] = tokenId;
}
result = $http(options).success(function (data, status) {
deferred.resolve(data);
}).error(function (err, status) {
typeof (err) === "string" ? err = { status: status } : (err == null ? err = { status: status } : err.status = status);
console.log('error: ', err);
deferred.reject(err);
});
return deferred.promise;
}
}]);
Questa è una factory che ho scritto per effettuare la chiamata e poi passare il risultato finale al controller principale dell'applicazione:
app.factory('DemoAPI', ['ApiCall', 'serializeData', function (ApiCall, serializeData) {
return {
Test: function (endpoint, tokenId) {
var response = [];
jsonData = {
showSubNodeIds: true
}
var QuickSearchIds = ["f9d524c9239a409292945a90ad395676", "1ac85a1369a44572a9643e7cca59ccdb", "14c0661a0e764cc28e1fc6bfca356440", "4b6bebd82b0e4354993552a8861985f8", "2f74995d716a45db865a728f4e119ae0"];
angular.forEach(QuickSearchIds, function (nodeId) {
ApiCall.GetApiCall(endpoint + nodeId, serializeData.serializeDataFn(jsonData), tokenId).then(function (data) {
if (data.resultCode == 'OK' && data.item != null && data.item.subNodes > 0) {
angular.forEach(data.item.subNodeIds, function (id) {
ApiCall.GetApiCall(endpoint + id, serializeData.serializeDataFn(jsonData), tokenId).then(function (data) {
if (data.resultCode == 'OK' && data.item != null) {
response.push(data.item);
}
});
});
}
});
});
return response;
}
};
}]);
All'interno del controller quando assegno il risultato ottenuto all'interno della factory ad una variabile dello scope praticamente la variabile non viene aggiornata e quindi non riesco a visualizzare i valori sulla vista:
$scope.test = DemoAPI.Test(endpoint, config.tokenId);
Potete aiutarmi indicandomi cosa sbaglio e come posso rimediare a questo problema?
Vi ringrazio in anticipo.
Saluti,
Alessio.