2017-06-02 47 views
0

在此循环中,希望得到任何帮助。尝试从服务中的api提取数据到我的控制器中,并以ng-repeat重复返回的数据。将数据从服务返回给控制器

已经试图用混合结果进行处理。

方法1:

app.factory('getServiceData',function($http){ 
var getPosts = function(){ 
    return $http.get("http://localhost:3000/posts") 
    .then(function(response){ 
     console.log(response.data) 
     return response.data 
    }) 
} 

控制器

app.controller('myCtrl',['getServiceData','$scope','$http', 
function($scope,$http,getServiceData){ 

getServiceData.getPosts().then(function(data){ 
    $scope.posts = data; 
}).catch(function(){ 
    $scope.error ='unable to get posts'; 
}); 

我的控制台将返回 “供应商 'getServiceData' 必须返回一个值从$获得工厂方法。”所以我的承诺没有返回我可以使用的get值,但不知道如何重构。

方法2时使用的ngRoutes解决用户导航到页面

方法2前拉API数据:

app.factory('getServiceData',function($http){ 

return { 
    var getPosts = function(){ 
    return $http.get("http://localhost:3000/posts") 
.then(function(response){ 
    console.log(response.data) 

return response.data 
    }) 
} 
}; 

配置:

.when('/home.html', { 
     templateUrl: 'app/home.html', 
     controller: 'myCtrl', 
     resolve: { 
     'ServiceData': function(getServiceData){ 
      return getServiceData.getPosts(); 
      } 
      } 

    }) 

第二种方法将从console.log响应中的api返回数据,但我无法在控制器中显示它。

回答

0

重构你的方法#1
的第一个问题是你service以及它是如何编码。
第二个问题是您的控制器的依赖注入顺序。

//Service 
app.factory('getServiceData', getServiceData); 
getServiceData.$inject = ['$http']; 
function getServiceData($http) { 
    return { 
    getPosts:() => $http.get('http://localhost:3000/posts') 
    } 
}); 

// Controller 
app.controller('myCtr', myCtrl); 
myCtrl.$inject = ['getServiceData', '$scope']; 
function myCtrl(getServiceData,$scope) { 
    getServiceData.getPosts().then(function(data){ 
    $scope.posts = data; 
    }).catch(function(){ 
    $scope.error ='unable to get posts'; 
    }); 
} 

有用的参考资料:

AngularJS: Factory vs Service vs Provider

Dependency Injection

+0

这就是它。我按照错误的顺序列出了我的依赖项。谢谢!! –

0

方法1应该是这样的:

它应该返回getPosts对象的控制器来理解,因此错误“供应商‘getServiceData’必须返回一个值从$获得工厂方法。”将得到解决。

app.factory('getServiceData',function($http) { 
    var getServiceDataFactory = {}; 
    var _getPosts = function() { 
     return $http.get("http://localhost:3000/posts") 
        .then(function(response){ 
         console.log(response.data); 
         return response.data; 
        }); 
    } 

    getServiceDataFactory.getPosts = _getPosts; 
    return getServiceDataFactory; 
}); 
2

您不需要在工厂解决承诺,因为您将其重新安装在控制器中。只需在工厂返回http并在控制器中解析即可。

而且,返回终点在工厂

app.factory('getServiceData',function($http){ 
    var getPosts = function(){ 
     return $http.get("http://localhost:3000/posts") 
    } 
    return { 
     getPosts : getPosts 
    } 

}) 
+0

试过这样做,但我得到一个回报getServiceData.getPosts不是一个函数。仍然是新的角度和服务 –

1

应该是这样到该对象。

app.factory('getServiceData', function($http){ 
    return { 
    getPosts : function() { 
     return $http.get("http://localhost:3000/posts") 
     } 
    }; 
}); 
相关问题