RodgerFox
@RodgerFox

Как побороть вложенности с вызовами?

Всем привет, имеется контроллер с подключенной к нему фабрикой, в контроллере:
loadProfile();
function loadProfile() {
            return loadProfileResource().then(function() {
                console.log('loadProfileResource Activated!');
            });
        }
        function loadProfileResource() {
            return ProfileFactory.getProfile.query()
                .then(function(data) {
                    $scope.profile = angular.copy(data);
                    return $scope.profile;
                });
        }

фабрика:
return {
            getActiveProfile: getActiveProfile,
            getProfile: getProfile
        };

        function getActiveProfile() {...}
        function getProfile() {
            var profile = $resource('/loadProfile&token='+$rootScope.token, {id_profile: '@id_profile'})
            return profile;
            /*
            с исп $http все просто и понятно и это работает
            return $http.get('/loadProfile&token='+$rootScope.token)
                .then(getActiveProfileComplete)
                .catch(getActiveProfileFailed);
            */
            function getActiveProfileComplete(response) {
                console.log(response);
                return response.data;
            }
            function getActiveProfileFailed(error) {
                console.log('XHR Failed for getActiveProfile.' + error.data);
            }
        }

А как быть если использую $resource???
В функции loadProfileResource() при вызове ProfileFactory.getProfile() ошибка, TypeError: ProfileFactory.getProfile.query is not a function
ProfileFactory.getProfile.query() — так же не правильно будет
Подскажите решение пожалуйста.
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
@Kano
Ошибка тут - ProfileFactory.getProfile.query()
Надо - ProfileFactory.getProfile().query()
А лучше вообще так
$scope.profile = ProfileFactory.getProfile($rootScope.token);


function getProfile(token) {
            var profile = $resource('/loadProfile', {token:token, id_profile: '@id_profile'});
            return profile.query();
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
RodgerFox
@RodgerFox Автор вопроса
В контроллере функция обращения к фабрики:
function loadProfileResource() {
            return ProfileFactory.getProfile(token).test({id_profile: 158}).then(function(data) {
           // или вариант
           // return ProfileFactory.getProfile(token).get().then(function(data) {
           // .query(), update и т.д.
                    $scope.profile = angular.copy(data);
                    console.log('+++');
                    return $scope.profile;
                });
}

Вот полный код фабрики:
(function() {
'use strict';
angular
    .module('LenaPillars')
    .factory('ProfileFactory', ProfileFactory);

    ProfileFactory.$injector = ['$rootScope', '$resource', '$http', 'logger'];
    function ProfileFactory($rootScope, $resource, $http, logger) {
        return {
            getActiveProfile: getActiveProfile,
            getProfile: getProfile
        };

        function getActiveProfile() {
            return $http.get($rootScope.storeUrl+'/checkProfile&token='+$rootScope.token)
                .then(getActiveProfileComplete)
                .catch(getActiveProfileFailed);

            function getActiveProfileComplete(response) {
                console.log(response);
                return response.data;
            }
            function getActiveProfileFailed(error) {
                console.log('XHR Failed for getActiveProfile.' + error.data);
            }
        }
        function getProfile(token) {
            return $resource($rootScope.storeUrl+'/loadProfile&token='+$rootScope.token, {id_profile: '@id_profile'}, {
                test: {
                    method: 'GET'
                },
                variant: {
                  //и список других методов
                }
            });
        }
    }
})();

Фабрика работает с частью приложения, исп. $resource и в дальнейшем будет побольше функций и вариантов метода, разве это нельзя так систематизировать?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы