UI-маршрутизатор AngularJS разрешает ресурс REST

0

Я работаю над приложением, которое фотографы могут использовать для загрузки фотографий. Интерфейс - AngularJS, а также RESTfull api.

Из-за некоторых проблем и того факта, что ui-router кажется лучше, чем ngRouter, я решил изменить $ routeprovider на $ stateProvider ui-router.

Однако мое решение больше не работает (я догадался, что это сломается, но я не могу найти решение моей ситуации).

Итак, вот исходный код $ rubeprovider:

.when('/photographer', {
  templateUrl : '/static/partials/photographer/photographer_dash.html',
  controller : 'photographerController',
  resolve: {
    photogPrepService: function (PhotogService) {
      return PhotogService.ownPhotos();
    }
  }
})

PhotogService - это $ resource service, которая имеет следующие объекты $ resource:

return $resource(apiHost, {}, {
            'ownPhotos': {
                url: apiHost + '/photographer_own_photos/',
                method: 'GET',
                interceptor: ResponseInterceptor
            }
});

В контроллере я бы сделал следующее (photogPrepService впрыскивается из-за разрешения):

var promise = photogPrepService;
promise.then(
function (data) {
    $scope.ownPhotos = data.data.photos;
});

Все это хорошо работало, и я получал фотографии в объеме.

Однако, как говорится в ui-router, это не работает, и я не могу заставить его работать...

Согласно документам (https://github.com/angular-ui/ui-router/wiki#resolve), следующее должно работать:

$stateProvider.state('photographer',
  {
    url: '/photographer',
    templateUrl: '/static/partials/photographer/photographer_dash.html',
    controller: 'photographerController',
    resolve: {
      photogPrepService: function (PhotogService) {
        return PhotogService.ownPhotos();
      }
    }

Однако, когда решение вводится в контроллер, и я использую console.log() для печати ответа, я получаю следующее:

Resource(value)

Я как-то не могу получить значения (JSON response {"photos":...}), введенный в контроллер. Я пробовал различные решения, которые были предложены здесь в stackoverflow и читайте руководства и API ui-router, но Я не могу окутать голову в то, что идет не так... Надеюсь, кто-то может вести меня в правильном направлении.

Благодарю!

Теги:
angular-ui-router

2 ответа

0

Я думаю, вы можете использовать следующий код:

//the PhotogService will keep the same as before

//inject the 'PhotogService' into the controller photographerController
PhotogService.ownPhotos().then(function(data) {
    $scope.ownPhotos = data.data.photos;
});

//instead of injecting the photogPrepService through 'resove', inject the PhotogService into the controller
//for the $stateProvider
$stateProvider.state('photographer',
{
    url: '/photographer',
    templateUrl: '/static/partials/photographer/photographer_dash.html',
    controller: 'photographerController',
}
  • 0
    Спасибо за Ваш ответ! Причина, по которой я думал, что решение - это путь, состоит в том, что может быть несколько состояний, которые используют один и тот же контроллер. Не во всех этих штатах требуется вызов ownPhotos. Разве это не выполняет вызов ownPhotos каждый раз, когда используется контроллер?
0

Вам нужно дать обещание решить проблему, ваш ресурс должен выглядеть больше:

$stateProvider.state('photographer',
{
  url: '/photographer',
  templateUrl: '/static/partials/photographer/photographer_dash.html',
  controller: 'photographerController',
  resolve: {
    photogPrepService: function (PhotogService) {
      return PhotogService.ownPhotos().$promise;
    }
  }
});

Или измените свои ресурсы, чтобы дать им обещания.

  • 0
    Благодарю. Я пытался использовать. $ Обещание в состоянии. Тем не менее, это не работает. Он по-прежнему возвращает вызовы API как Resource(value) . Однако в разрешении он возвращает $promise , но не после того, как он введен. Я рассмотрю изменение ресурсов. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню