通过Angular服务使用RESTful响应

时间:2016-01-19 17:17:35

标签: angularjs json rest

我正在关注scotch.io的tutorial建立一个RESTful API,同时试图熟悉MEAN堆栈。

到目前为止,我已经关注了很多内容,并让我的RESTful API按预期发送了JSON。我是否应该尝试通过浏览器地址栏访问它或者使用Postman进行试用它。

我在使用所述JSON响应时遇到问题。

根据教程,Angular应用程序分为 controllers services 。该服务使用<option>来调用RESTful端点。我怀疑的是我应该在哪里以及如何使用该服务来调用数据。

是否在控制器中? 服务是否以我可以将其响应添加到$http的方式公开?

我是Angular /客户端路由的新手,所以请保持温和:)我的代码如下。

(博客)控制器:

$scope

服务

angular.module('BlogCtrl', []).controller('BlogController', function($scope, $http) {

    $scope.tagline = 'Blog page!';

    // can and should I call the service here?

});

路线:

angular.module('BlogService', []).factory('Post', ['$http', function($http) {

    return {
        // call to get all posts
        get : function() {
            return $http.get('/api/blog');
        }     

}]);

Angular App:

angular.module('appRoutes', []).config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {

    $routeProvider

        // blog page that will use the BlogController
        .when('/blog', {
            templateUrl: 'views/blog.html',
            controller: 'BlogController'
        })        

    $locationProvider.html5Mode(true);

}]);

2 个答案:

答案 0 :(得分:2)

是的,您可以在BlogController

中拨打$ http电话

但是,如果您想使用“Post”工厂,则应将其注入控制器

angular.module('BlogCtrl', []).controller('BlogController', function($scope, Post) {...}

并提出请求

Post.get().then(
  function(response){console.log(response.data)},
  function(errorResponse){/*...*/}
);

(我认为您还应该阅读有关$resourcehttps://docs.angularjs.org/api/ngResource/service/ $资源)的内容。也许您可以使用它来替换{​​{1}}工厂;)

答案 1 :(得分:0)

您希望将服务注入控制器(或您将使用它的任何其他位置),然后使用注入的服务对象进行函数调用

angular.module('BlogCtrl', [])
    .controller('BlogController', function($scope, Post) {

    $scope.tagline = 'Blog page!';

    // Use service to get data
    Post.get().then(responsePromise){
     $scope.someVariable = responsePromise.data;
    }).catch(function(err){
       console.warn('Ooops error!')
    });        

});
相关问题