Javascript 如何使用angularJS定制服务从RESTAPI获取数据

Javascript 如何使用angularJS定制服务从RESTAPI获取数据,javascript,angularjs,rest,Javascript,Angularjs,Rest,我试图使用angularJS定制服务从RESTAPI(“”)获取Json数据,但它没有显示数据。虽然当我在浏览器中直接键入url时,它会显示一些数据 这是角度服务代码 angular.module('myapp.service',[]) .service('testService', function ($http) { //get All NewsLetter this.getPosts = function () { return $ht

我试图使用angularJS定制服务从RESTAPI(“”)获取Json数据,但它没有显示数据。虽然当我在浏览器中直接键入url时,它会显示一些数据

这是角度服务代码

angular.module('myapp.service',[])
       .service('testService', function ($http) {

     //get All NewsLetter
     this.getPosts = function () {
         return $http.get('http://jsonplaceholder.typicode.com/posts');
     };
     });
和控制器

angular.module('myapp.controller',[])
       .controller('testController',function($scope,testService){

        $scope.posts={};
 function GetAllPosts() {
               var getPostsData = testService.getPosts();

               getPostsData.then(function (post) {
                   $scope.posts = post.data;

               }, function () {
                   alert('Error in getting post records');
               });
           }
       });
当我在浏览器中调试它时。它显示服务函数正在返回未定义的数据

虽然当我试图使用代码直接在控制器中获取数据时

angular.module('myapp.controller',[])
       .controller('testController',function($scope,testService,$http){
         $http.get('http://jsonplaceholder.typicode.com/posts')
        .success(function (data) {
        $scope.posts=data ;
    });  

       });
工作正常,有人能告诉我在服务中哪里出了错吗

我使用了一个具有所有依赖注入的父模块

angular.module('myapp',['myapp.controller','myapp.service']);  

在共享的代码中,您从未调用控制器中的
GetAllPosts
方法。请参阅下面的工作插销


注意-我必须为plunker创建URL https

您在服务器上启用了cors吗?您忘记将myapp.service模块导入myapp.controller模块。这就是testService无法解决且无法工作的原因。将其添加为依赖项:angular.module('myapp.controller',['myapp.service'])。虽然我确实想知道您为什么要为此创建两个单独的模块?@fikkatra我使用了一个父模块,该模块具有所有依赖项注入。很抱歉,最初没有显示问题中的全部代码。我已对问题作了修改。所以依赖注入不是问题所在。我使用了一个包含所有依赖注入的父模块。很抱歉,在开始的问题中没有显示完整的代码。我已对问题作了修改。所以我想依赖注入不是问题所在。是不是你也没有在你的控制器中调用
GetAllPosts
方法?@simba-当你清楚地理解了DI:)@simba这样的困难部分时,你难道不讨厌这些小事情吗?同时,你添加的依赖注入确实有效,总有一天它会咬你的屁股,因为你对
myapp.service
的真正依赖是
myapp.controller
。将依赖项放在
myapp
myapp.controller
模块中没有坏处,因为angular只会创建
myapp.service
的一个实例,这两个项目之间共享。感谢您的建议。我将进行必要的更改,并在将来记住。
service function is returning data, you can check by adding another then() to promise object returned by service.
function GetAllPosts() {
var getPostsData = testService.getPosts();
getPostsData.then(function (post) {
$scope.posts = post.data;
}, function () {
alert('Error in getting post records');
}).then(function(){
console.log($scope.posts); 
});
}
make sure that you are checking response inside then()