Получение данных из сообщения об успехе с отдельного контроллера angularjs

Я пишу простую службу, которая загружает файл и отправляет его на контроллер Spring. Контроллер обрабатывает эти данные и возвращает несколько объектов в формате JSON. Я работаю со следующим сервисом Angular:

myApp.service('fileUpload', [ '$http', function($http) {
        this.uploadFileToUrl = function(file, uploadUrl) {
            var fd = new FormData();
            fd.append('file', file);

            $http.post(uploadUrl, fd, {
                transformRequest : angular.identity,
                headers : {
                    'Content-Type' : undefined
                }
            })

            .success(function(data) {
                console.log("upload successful")
                //console.log(data)
                namesandaddresses = data;
            })

            .error(function() {
                console.log("upload error")
            });
        }
    } ]);

У меня есть отдельный контроллер в коде, который я хочу использовать для отправки этих данных (имен и адресов) в представление и использовать ng-repeat для отображения информации. Сейчас моя проблема заключается в извлечении данных за пределы этой функции успеха, не говоря уже о самой службе. Я попытался создать глобальную переменную nameandaddresses вне службы, чтобы иметь доступ к ней с другого контроллера, но она отображается как неопределенная.

Из своего исследования я обнаружил, что подходящий способ сделать это — использовать функцию обратного вызова, но мои попытки записать это в службу нарушают базовую функцию. Прежде чем вернуться к изменению дизайна этой службы или пересмотреть свой подход, я хотел опубликовать это и посмотреть, может ли сообщество stackoverflow помочь мне настроить эту службу, чтобы я мог опубликовать этот JSON в представлении в случае успеха.

Кто-нибудь протянет мне руку?


person giri    schedule 13.07.2017    source источник
comment
Вы можете внедрить эту службу в свой контроллер и вернуть что-то из службы.   -  person Vivz    schedule 13.07.2017


Ответы (1)


Это очень легко.

Контроллер:

fileUpload.uploadFileToUrl (file,uploadUrl, {
            successCallBack: yourSuccessHandler,
            failureCallBack: yourFailureHandler
        });

function yourSuccessHandler(data) {
            $scope.data= data; 
        }

function yourFailureHandler() {
            console.log("Failed Messge printing from Controller"); 
        }

Услуга

myApp.service('fileUpload', [ '$http', function($http) {
        this.uploadFileToUrl = function(file, uploadUrl, options) {
            var fd = new FormData();
            fd.append('file', file);

            $http.post(uploadUrl, fd, {
                transformRequest : angular.identity,
                headers : {
                    'Content-Type' : undefined
                }
            })

            .success(function(data) {
                console.log("upload successful");
                if(options && options.successCallBack) {
                    return options.successCallBack(data);
                }
            })

            .error(function() {
                console.log("upload error");
                if(options && options.failureCallBack) {
                    return options.failureCallBack();
                }
            });
        }
    } ]);
person Wasif Khan    schedule 13.07.2017