我创建了一个非常简单的工厂
angular.module('vpmClient')
.factory('DatosFactory', function($http){
var datos = {};
datos.data = [];
datos.getDatos = function(){
$http.post('php/dataHandler.php',{action:"get_datos"}).success(function(data){
datos.data = data;
});
};
datos.getDatos();
return datos;
})
在Controller中我设置了#34; datos.data"的值。到范围变量
angular.module('vpmClient')
.controller('DatosController', function($http,$scope,DatosFactory){
$scope.datos = DatosFactory.data;
$scope.datoSeleccionado = {};
$scope.getDatos = function(){
console.log(DatosFactory.data);
return DatosFactory.data;
}
$scope.mostrarDato = function(dato){
//$scope.datoSeleccionado = dato;
//Magia
}
});
我需要" scope.datos"的价值。一旦工厂的帖子结束就更新
注意:我从工厂做了一个console.log(在成功的内部)并且它正确地给了我Object,同样,在控制器中我创建了一个函数来从浏览器控制台返回工厂的值并且它也有效,但是当我在console.log" scope.datos"它返回一个空对象。
抱歉我的英文不好
答案 0 :(得分:2)
只需将$ http中的承诺退还给控制器
angular.module('vpmClient').factory('DatosFactory', function($http){
var datos = {};
datos.data = [];
datos.getDatos = function(){
return $http.post('php/dataHandler.php',{action:"get_datos"});
};
return datos;
})
在控制器中,您可以调用服务
angular.module('vpmClient').controller('DatosController', function($http,$scope,DatosFactory){
$scope.datos = DatosFactory.data;
$scope.datoSeleccionado = {};
$scope.getDatos = function(){
DatosFactory.getDatos()
.then(function(httpResponse){
console.log(httpResponse.data);
$scope.datoSeleccionado = httpResponse.data;
})
}
});
答案 1 :(得分:1)
您需要使用then
关键字:
$scope.getDatos = function() {
DatosFactory.getDatos().then(function(data) {
$scope.datos = data;
});
}