【问题标题】:Angular scope not updating to factory value角度范围未更新为出厂值
【发布时间】:2015-09-01 12:19:10
【问题描述】:

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

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

在控制器中,我将“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(在成功内),它正确地给了我对象,而且,在控制器中我创建了一个函数来从浏览器控制台返回工厂的值,它也可以工作,但是当我 console.log "scope.datos" 它返回一个空对象。

对不起我的英语不好

【问题讨论】:

  • 什么时候看到空的 console.log ?你把它放在哪里了?

标签: javascript angularjs


【解决方案1】:

只需将承诺从 $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;
  })
}
});

【讨论】:

  • 这是正确的做法。也可以使用thensuccess。 OP 您在发布完成之前访问 var。
  • 我更喜欢'then'。只是为了外观:)
  • 当然.. 就是这样 +1。但那是给 OP 的,如果他/她想像以前一样使用success
  • 我已经用 $scope.datos = DatosFactory;并在 html datos.data 中的 ng-repeat 中。但是您的答案非常有效,因此这是一个可以接受的问题,谢谢!
【解决方案2】:

你需要使用then关键字:

$scope.getDatos = function() {
    DatosFactory.getDatos().then(function(data) {
        $scope.datos = data;
    });
}

【讨论】:

  • $scope.getDatos 这是我用来从浏览器控制台检查的函数,它从未执行过
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-30
  • 2015-12-12
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多