2016-03-03 117 views
0

我有一个服务来从作为参数传递的url中获取数据。有用。 但是当我想通过这个数据到控制器$范围,我没有得到任何将数据从服务传递到控制器AngularJS

var app= angular.module("ReciboApp",[]); 
 
    // -------- SERVICIOS ------------------- 
 
    app.service("ABMService",function($http){ 
 
     this.obtenerDatos= function(url){ 
 
      $http.get(url) 
 
       .success(function(data) { 
 
        datos = eval(data); 
 
        console.log(datos); //[Object, Object, Object, Object, Object] 
 
        return datos              
 
       }) 
 
       .error(function(data) { 
 
        console.log('Error: ' + data); 
 
       }); 
 
     } 
 
    }); 
 
// -------- CONTROLADORES ------------------- 
 
// -- Empresas -- 
 
var empresasController= function($scope, ABMService){ 
 
    var url= "modelos/empresas_json.php" 
 
    $scope.empresas= []; 
 
    $scope.empresas = ABMService.obtenerDatos(url); 
 
    console.log($scope.empresas); //undefined 
 
} 
 
app.controller("EmpresasCtrl", empresasController);

+0

看看我的答案在这里:http://stackoverflow.com/a/35783394/3930193 –

+0

谢谢!我用尼古拉斯格拉齐亚诺的答案解决了。 http://stackoverflow.com/a/35783564/6015590 –

回答

1

obtenerDatos功能不返回任何东西 - 它只是让到$http异步调用。尝试返回$http调用的结果(角承诺),然后附上.then处理程序返回的承诺在您的控制器:

var app= angular.module("ReciboApp",[]); 
    // -------- SERVICIOS ------------------- 
    app.service("ABMService",function($http){ 
     this.obtenerDatos= function(url){ 

      // add a return statement here 
      return $http.get(url) 

       // change .success() to .then() 
       .then(function(data) { 
        datos = eval(data); 
        console.log(datos); //[Object, Object, Object, Object, Object] 
        return datos;              
       }) 

       // change .error() to .catch() 
       .catch(function(data) { 
        console.log('Error: ' + data); 
       }); 
     } 
    }); 
// -------- CONTROLADORES ------------------- 
// -- Empresas -- 
var empresasController= function($scope, ABMService){ 
    var url= "modelos/empresas_json.php" 
    $scope.empresas= []; 

    // wait for the obtenerDatos() call to complete, and then 
    // attach the returned data to the $scope 
    ABMService.obtenerDatos(url).then(function(datos) { 
     $scope.empresas = ABMService.obtenerDatos(url); 
     console.log($scope.empresas); //undefined 
    }); 
} 
app.controller("EmpresasCtrl", empresasController); 

另外请注意,我改变了.success().error()回调.then().catch(),因为the former have been deprecated

+0

感谢您的回答,但不显示数据在视图中(ng-repeat) –

0

谢谢!我用尼古拉斯格拉齐亚诺的答案解决了。 https://stackoverflow.com/a/35783564/6015590

app.factory('MYAPI', function($http) { 
 
    return { 
 
     obtenerDatos: function(url) { 
 
      return $http.get(url); 
 
     } 
 
    } 
 
}); 
 
var empresasController= function($scope, MYAPI){ 
 
    var url= "modelos/empresas_json.php"; 
 
    MYAPI.obtenerDatos(url).then(function(response) { 
 
     $scope.empresas = eval(response.data); 
 
    }, function(error) { 
 
     console.error(error); 
 
}); 
 
app.controller("EmpresasCtrl", empresasController);

相关问题