带有$ http.get的AngularJS服务不会将数据传递给控制器

时间:2015-07-03 14:39:10

标签: javascript json angularjs service controller

我是AngularJS的新手并且仍然坚持基础。

我使用$ http.get创建服务来加载几个Json文件。当我将服务加载到控制器中时,我得到空数组。

这是我的服务

app.service('productService', ['$http', function($http){
    var lista = this;
    lista.products = [];
    lista.menu = [];

    $http.get('/prodotti_1.json').success(function(data){
        lista.products = data;
    });

    $http.get('/menu_1.json').success(function(data){
        lista.menu = data;
    });
}]);

这是我的控制者:

app.controller('ProductController', ['productService', function(productService){
    console.log(productService.products);
    console.log(productService.menu);
}]);

控制台只打印一个空数组[]。 如果我将console.log(数据)放在成功承诺中,则console.log会很好地打印数组。 我从代码学院想到它可能更容易,但我想我错过了将数据从成功承诺传递给控制器​​的一点。 在许多其他情况下,我看到$ scope变量的用法,但我了解到如果我使用"这个"我也可以避免使用。所以我的代码没有显示任何$ scope。

我使用的是Angular 1.4.1 FYI,我看到很多论坛和其他问题,但看起来情况不同。

谢谢

1 个答案:

答案 0 :(得分:1)

您在解析承诺之前访问变量。你可以做的是返回一个具有各种承诺作为财产的对象。

app.service('productService', ['$http', function($http){
    return {
         request1: $http.get('/prodotti_1.json'),
         request2: $http.get('/menu_1.json')
       }
}]);

所以你可以在控制器中处理它。

app.controller('ProductController', ['productService', function(productService){
    productService.request1.success(function(data){
        //access the data
    });

    productService.request2.success(function(data){
        //access the data
    });
}]);

希望它有所帮助。