2014-02-01 6 views
0

Просто попробуйте получить очень простой REST, чтобы позвонить, используя angularjs $resource. API никогда не вызывается. Вот код:

angular.module('app.services', []) 
.service('tourRepository', function ($resource) { 
    this.get = function (id) { 
     alert('tourRepositoryCalled for id ' + id + '!'); // this is called 
     var tour = $resource('/api/tour/:tourid', { tourId: '@id' }); 
     return tour.get({ tourId: id }, function() { 
      alert('tour api called.'); // THIS NEVER IS 
     }); 
    } 

Если я использую браузер и перейти к/API/тур/3, она работает. Что я здесь делаю неправильно? Я думал, что $ resource calls может быть намного проще, например, как показано ниже, но я следую документации по angularjs.

В идеале:

$scope.tour = $resource.get('/api/tour/' + id); // why wouldn't this work? 

Все, что я хочу сделать, это вызвать простой сервис REST и присвоить результаты моего объекта $ scope.tour. Так как я нахожусь в сервисе (мой «репозиторий»), у меня нет доступа к области $. Каков наилучший способ сделать это? Когда я меняю код на ниже, API получает удар.

 var tour = $resource('/api/tour/:tourid'); 
     var theTour = tour.get({ tourid: id }); 
     alert(theTour.id); 
+0

Если вы открыты хромовые инструменты для разработчиков, как все смотрят на вкладке сети? – Fedaykin

ответ

1

Для простых моделей, которые вы можете использовать $ HTTP вместо $ ресурса

$http.get('/api/tour/' + id).success(function (tour) { 
    $scope.tour = tour; 

});

$ resource - это сервис для создания классов javascript (стиль ActiveRecord).

var Tour = $resource(...) // capital T 
var tour1 = Tour.get() 

Хотя это немного запутанно, ваш код должен работать. выполняется ли запрос ajax? и возвращает ли он действительный ответ?

+0

Запрос ajax не выполняется. Когда я меняю код на использование объекта тура в службе, это происходит. –

+0

метод $ http.get(). Success() был самым простым способом реализации этого. Я не полностью понимаю ресурс или почему вы его используете. Предположительно, более мощный для REST, но я не мог заставить его работать. –

0

После того, как запрос на получение завершен, возвращаемый объект заполняется данными, полученными от ответа, в методенет обратного вызова.

$resource полезен, когда вы присоединяете объект, который возвращается вызовом экземпляра области видимости. В этом случае, когда объект разрешен, и цикл дайджеста называется, просмотр автоматически обновляется.

Если вам нужен обратный вызов вы можете использовать:

$http.get('/api/tour/' + id) 
.then(function (tour) { 
    $scope.tour = tour; 
}); 

Используя свои услуги вы можете:

function MyCtrl($scope, tourRepository) { 
    $scope.tour = tourRepository.get(ID_OF_THE_TOUR); 
} 
+0

Это именно то, что я хочу сделать, назначить результат моей $ scope.tour. Я думал, что могу сделать все это с $ resource на более высоком уровне, чем $ http (так что не нужно разбираться с обещаниями) –

+0

Хорошо, отлично. Я обновил свой ответ, чтобы отразить ваш вопрос. Пожалуйста, дайте мне знать, если это сработает для вас. –

+0

Я выполнил свой обратный вызов, используя вашу рекомендацию на $ http.get .. Я нахожу $ resource невероятно запутанным и не могу заставить его работать.это было просто и легко. Я думаю, что .success, вероятно, правильный метод для использования (а не. Then), не так ли? –

0

Вы должны включить ngResource модуль в вашем приложении ('app.services') зависимостей. Написание tourid в URL должен быть tourId

angular.module('app.services', ['ngResource']) 
.service('tourRepository', function ($resource) { 
    this.get = function (id) { 
     alert('tourRepositoryCalled for id ' + id + '!'); 
     var tour = $resource('/api/tour/:tourId', { tourId: '@id' }); 
     return tour.get({ tourId: id }, function() { 
      alert('tour api called.'); 
     }); 
    } 
+0

Это неправда. У меня есть зависимость «ngResource» от объявления моего приложения, и она попадает в правильные ситуации (см. Мой вопрос). –

+0

Я не вижу ни одной строки, как 'angular.module ('app.services', ['ngResource']) 'в вашем коде. –

+0

Я обновил свой ответ. Пожалуйста, проверьте. У вас есть орфографическая ошибка в goid в url. –

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