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
}
一旦我从http请求中获取数据,我正在调用一些服务,该服务会向接收的数据添加一些信息。即data + service()= updatedData。 现在,在这个更新的数据上,我正在应用一些计算,并在视图中显示它。 但是这件事没有用。我尝试将此计算添加到 prom.success 本身,但我仍然没有获得更新数据。我尝试将 setInterval()添加到$ scope.abc,但有时它显示有时不会。
请帮我解决这个问题。
谢谢
答案 0 :(得分:1)
在将解析数据的服务中编写方法。在方法中首先调用$ http来获取数据。获得数据后,请拨打第二项服务,这将添加额外的信息。完成后(即已解决第二个服务的承诺),解析更新数据。从控制器中调用服务中的此方法,并等待它被重新保存。当它改变了; '然后'在将显示数据的范围上调用您的方法。我会为你发一个工作小提琴。
您可以查看小提琴here。
<强>服务强>
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
}
})
注意:callApi方法是$ http调用的虚方法。将其替换为您的实际API调用。
<强>控制器强>
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();
}