2016-04-21 5 views
0

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

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

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

Так вот исходный код $ routeprovider:

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

PhotogService услуга $ ресурс, который имеет следующие $ объекты ресурсов:

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

В контроллере я бы затем сделать после (фотогрПрепСервис вводится из-за разрешения):

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

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

Однако, как сказал с Ui-маршрутизатор не работает, и я не могу заставить его работать ...

Согласно документации (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) 

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

Спасибо!

ответ

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 каждый раз, когда используется контроллер? – nobody

0

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

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

или изменить RESSOURCES сделать они обещают.

+0

Спасибо. Я пытался использовать. $ Обещаю в государстве. Однако это не работает. Он по-прежнему возвращает вызовы API как «Ресурс (значение)». Тем не менее, в решении он возвращает '$ prom', но не после его ввода. Я изучу изменения ресурсов. Благодаря! – nobody

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