带有$http.get的AngularJS服务没有't将数据传递给控制器

AngularJS service with $http.get doesn't pass data to a controller

本文关键字:数据 控制器 get http AngularJS 服务 带有      更新时间:2023-09-26

我是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变量的用法,但我了解到,如果我使用"this",我也可以避免使用。这就是我的代码不显示任何$scope。

我使用Angular 1.4.1仅供参考,我看到了许多论坛和其他问题,但情况似乎有所不同。

感谢

您正在解析promise之前访问变量。您可以做的是返回一个对象,该对象将您的各种承诺作为属性。

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

希望能有所帮助。