2016-01-19 3 views
0

Я следую за tutorial от scotch.io по созданию API RESTful, пытаясь ознакомиться со стеком MEAN.Потребление ответа RESTful через угловое обслуживание

Я до сих пор следил за всем, и мой RESTful API отправил JSON, как и предполагалось. Должен ли я попытаться получить доступ к нему через адресную строку браузера или попробовать его с помощью Postman, он работает.

У меня возникли проблемы с потреблением упомянутого ответа JSON.

Согласно учебнику, Угловой приложение делятся на контроллеры и услуг. Служба использует $http для вызова конечной точки RESTful. Мое сомнение в том, где и как я должен использовать эту службу для вызова данных.

Есть ли у контроллера? Является ли услуга выставленной так, что я могу добавить ее ответ на $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.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); 

}]); 

Угловая App:

angular.module('myApp', ['ngRoute', 'appRoutes', 'MainCtrl', 'BlogCtrl', 'BlogService']); 

ответ

2

Да, вы можете сделать $ HTTP вызов в вашем BlogController.

Однако, если вы хотите использовать свой завод «Post», вы должны вводить его в контроллер

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

и сделать запрос

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

(я думаю, вы должны также прочитать о $resource (https://docs.angularjs.org/api/ngResource/service/ $ resource). Возможно, это то, что вы могли бы использовать для замены своего завода Post;))

+0

не нужно создавать 'new' экземпляр, завод не возвращает' this' как служба делает – charlietfl

+0

@charlietfl, вы правы. Ред. – akn

+0

Спасибо, что ответили! К сожалению, он не работает. На консоли ничего не отображается, либо ответ, либо errorResponse. Есть предположения? – Joum

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!') 
    });   

}); 
+0

Обратите внимание, что 'BlogService' является именем модуля и' Post' является его заводским именем, поэтому он, вероятно, не будет работать;) – akn

+0

Спасибо, что ответили!к сожалению, это не работает. Если я присваиваю 'responsePromise.data'' $ scope.posts', не может ли 'ng-repeat' использовать' x в сообщениях'? Кроме того, я думаю, что что-то может быть не так с вашим синтаксисом. вы не могли бы проверить? – Joum

Смежные вопросы