Angularjs 1.7.x, Как я могу поймать успех после выполнения метода, при условии, что метод выполняется из другого файла и имеет свой собственный обработчик успеха? - PullRequest
0 голосов
/ 04 июля 2018
$scope.uploadAppFile = function(element) {
            console.log("uploadAppFile : selectedAppId "+$scope.selectedAppId);
            $rootScope.uploadFile(element.files, $scope.selectedAppId, element.id, $scope,false);
        }

Выше приведен мой код uploadAppFile из файла upload.js, я запускаю API-интерфейс файла rootScope js.

$rootScope.uploadFile = function(files, applicationId, documentId, scope, isUserDoc) {
            if ($rootScope.isEmpty(documentId)) {
                Notification.warning("Document id is null or empty !!");
                return;
            }
            var formData = new FormData();
            formData.append("file", files[0]);
            var data = {};
            data.applicationId = applicationId;
            data.documentId = documentId;
            if(isUserDoc != undefined && isUserDoc != null){
                data.isUserDocument = isUserDoc;    
            }
            formData.append("uploadRequest", JSON.stringify(data));

            $http({
                method : "POST",
                enctype : 'multipart/form-data',
                url : URLS.user + "/upload",
                headers : {
                    'Content-Type' : undefined,
                    'token' : $cookieStore.get(Constant.TOKEN)
                },
                data : formData,
                processData : false,
                cache : false
            })
                .then(
                    function success(response) {
                        if (response.data.status == 200) {
                            if (response.data.data.isFileUpload) {
                                Notification.info("Successfully Uploaded !!");

                            } else {
                                Notification.warning("File can't uploaded !!");
                            }

                        } else if (response.data.status == 400) {
                            Notification.warning(response.data.message);
                        }
                    }, function errorCallback(error) {
                        $rootScope.validateErrorResponse(error);
                    });
        }

Выше находится мой файл rootScope.js, в котором объявлен метод загрузки файла.

Я хотел позвонить из файла upload.js, как показано ниже, внешний успех пойман

$ rootScope.uploadFile (element.files, $ scope.selectedAppId, element.id, $ scope, false) .then (function (success) {// Делать вещи здесь}) ;

Возможно ли это, потому что я хочу проверить, как только файл был загружен, а затем включить несколько параметров в пользовательском интерфейсе, я не хочу изменять файл rootScope.js, поскольку он является общим и общим.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Вернуть обещание при успехе / неудаче, используя

return $q.resolve() 

или

return $q.reject();

и не забудьте также добавить возврат на http. после этого вы можете сделать .hen на вызывающей стороне (uploadFiles).

Я знаю, что вы сказали не изменять rootScope.js, однако нет другого способа получить уведомление о завершении асинхронной задачи, если вы не отправляете какое-либо сообщение туда и обратно через событие или обещание.

В любом случае, если вы действительно хотите не изменять rootScope.js, вы можете просто сделать какой-то неприятный цикл и подождать, пока не появится уведомление с сообщением :) (крайне не рекомендуется, не делайте этого) .)

Код ниже, на что это должно быть похоже с обещанием. (не забудьте ввести $ q)

 $rootScope.uploadFile = function(files, applicationId, documentId, scope, isUserDoc) {
                if ($rootScope.isEmpty(documentId)) {
                    Notification.warning("Document id is null or empty !!");
                    return $q.reject();
                }
                var formData = new FormData();
                formData.append("file", files[0]);
                var data = {};
                data.applicationId = applicationId;
                data.documentId = documentId;
                if(isUserDoc != undefined && isUserDoc != null){
                    data.isUserDocument = isUserDoc;    
                }
                formData.append("uploadRequest", JSON.stringify(data));

               return $http({
                    method : "POST",
                    enctype : 'multipart/form-data',
                    url : URLS.user + "/upload",
                    headers : {
                        'Content-Type' : undefined,
                        'token' : $cookieStore.get(Constant.TOKEN)
                    },
                    data : formData,
                    processData : false,
                    cache : false
                })
                    .then(
                        function success(response) {
                            if (response.data.status == 200) {
                                if (response.data.data.isFileUpload) {
                                    Notification.info("Successfully Uploaded !!");
                                    return $q.resolve();
                                } else {
                                    Notification.warning("File can't uploaded !!");
                                    return $q.reject();
                                }
                            } else if (response.data.status == 400) {
                                Notification.warning(response.data.message);
                                return $q.reject();
                            }
                        }, function errorCallback(error) {
                            $rootScope.validateErrorResponse(error);
                            return $q.reject();
                        });
            }

$scope.uploadAppFile = function(element) {
                console.log("uploadAppFile : selectedAppId "+$scope.selectedAppId);
                $rootScope.uploadFile(element.files, $scope.selectedAppId, element.id, $scope,false)
                .then(function(){
                    //success
                }, function(){
                    //failed
                });
            }

Это не нарушит любое существующее использование файлов rootScope.js. Однако необходимо выполнить больше оптимизаций, это должно ответить на ваш вопрос

0 голосов
/ 04 июля 2018

Определите сервис или фабрику вместо этого. Документы: https://docs.angularjs.org/guide/services

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...