角度范围未更新为出厂值

时间:2015-06-16 15:17:19

标签: javascript angularjs

我创建了一个非常简单的工厂

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"它返回一个空对象。

抱歉我的英文不好

2 个答案:

答案 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;
    });
}