Я работаю над приложением, которое фотографы могут использовать для загрузки фотографий. Интерфейс - 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, но Я не могу окутать голову в то, что идет не так... Надеюсь, кто-то может вести меня в правильном направлении.
Благодарю!
Я думаю, вы можете использовать следующий код:
//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',
}
Вам нужно дать обещание решить проблему, ваш ресурс должен выглядеть больше:
$stateProvider.state('photographer',
{
url: '/photographer',
templateUrl: '/static/partials/photographer/photographer_dash.html',
controller: 'photographerController',
resolve: {
photogPrepService: function (PhotogService) {
return PhotogService.ownPhotos().$promise;
}
}
});
Или измените свои ресурсы, чтобы дать им обещания.
Resource(value)
. Однако в разрешении он возвращает $promise
, но не после того, как он введен. Я рассмотрю изменение ресурсов. Спасибо!