RodgerFox
@RodgerFox

Как правильно обратиться к функции в фабрике?

Всем привет, подскажите, как избавиться от этой ужасной ошибки. есть директива, её задача вывести объект, получаемый от запроса к фабрике, та в свою очередь получает инфу от $resource.
// директива должна вывести инфу из запроса от фабрики ProfileResource
(function() {
'use strict';
angular
    .module('LenaPillars')
    .directive('statusProfileDirective', statusProfileDirective);

    statusProfileDirective.$injector = ['$log', 'ProfileResource'];

    function statusProfileDirective($log, ProfileResource) {        
        return {
            // controller: 'MainController',
            restrict: 'E',
            templateUrl: 'templates/directive/checkProfileService.html',
            replace: true,
            transclude: true,
            scope: {
                status: '&'
            },
            link: function ( scope, element, attrs) {
                scope.statusus = getProfile();
                console.log(scope.statusus);
            }

        }

        function getProfile() {
            return getProfileCheck().then(function() {
                logger.info('Все прошло норм');
            });
        }

        function getProfileCheck() {
            return ProfileResource.then(function() {
                return checkProfile.checkActiveProfile()
                .then(function(data) {
                    console.log('gde ti moi data: '+data);
                    vm.avengers = data;
                    return vm.avengers;
                });
            });
        }
        
    }
})();

Здесь главная загвоздка в этом безумии:
return ProfileResource.then(function() {
                return checkProfile.checkActiveProfile()

На самом деле она должна быть
ProfileResource.checkProfile.the(function() { ..... 
//но как в ней обратиться к checkActiveProfile ??? ужасно туплю, понимаю что то переставить и все должно работать

фабрика:
// ProfileResource фабрика с $resourse
(function() {
'use strict';
angular
    .module('LenaPillars')
    .factory('ProfileResource', ProfileResource);

    ProfileResource.$injector = ['$rootScope', '$resource'];

    function ProfileResource($rootScope, $resource) {
        return {
            checkProfile: checkProfile
        }
        function checkProfile() {
            return $resource($rootScope.storeUrl+'/checkProfile&token='+$rootScope.token, 
                {
                    setting_profiles: 'setting_profiles'
                }, 
                {
                    'checkActiveProfile': {
                        method: 'GET', isArray: false
                    }
                })
            .then(getAvengersComplete)
            .catch(getAvengersFailed);
        }
        function getAvengersComplete(response) {
            return response.data.results;
        }

        function getAvengersFailed(error) {
            logger.error('XHR Failed for getAvengers.' + error.data);
        }
    }
})();

lena_pillars/templates/directive/checkProfileService.htm простенький {{status}}, весь контент будет от неё плясать.
И еще, Вот директива, с выводом инфы от фабрики, она выполняется один раз, а как заставить повторно обратиться от контроллера(ов) который(ые) могут быть безумно далеки от её местоположения в структуре?
Большое спасибо.
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 1
У вас вообще какое-то мясо, если честно : (

Обычно разделяют конфигурацию для $resourse и обработку ответов в разные части кода.
В вашем случае я бы сделал так:
(function() {
'use strict';
	angular
    .module('LenaPillars')
    .factory('ProfileResource', ProfileResource);

    ProfileResource.$injector = ['$rootScope', '$resource'];
    function ProfileResource($rootScope, $resource) {
		var photosResource = $resource(
			$rootScope.storeUrl, 
			{
				checkActiveProfile: {
		            method: 'GET', 
		            isArray: false,
		            url: $rootScope.storeUrl+'/checkProfile'
		        }
			}
			
		);

		function checkActiveProfile() {
			return new photosResource()
				.$checkActiveProfile({token: $rootScope.token, setting_profiles: 'setting_profiles'})
// then принимает 2 параметра, для resolve и reject
				.then(getAvengersComplete, getAvengersFailed);
			function getAvengersComplete(response) {
		        return response.data.results;
		    }

		    function getAvengersFailed(error) {
		        logger.error('XHR Failed for getAvengers.' + error.data);
		    }
		}

		return {
			checkActiveProfile: checkActiveProfile,
		}
	}
})();

Вызов функции в где угодно будет выглядеть так:
function getProfileCheck() {
    return ProfileResource
    .checkActiveProfile()
    .then(function(data) {
        console.log('gde ti moi data: '+data);
        vm.avengers = data;
        return vm.avengers;
    });
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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