2016-03-03 5 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);

Смежные вопросы