Angular - передать область обслуживания и установить значение

0

Я не могу передать/установить значение в текстовую область вне контроллера. Я загружаю excel и касаюсь статуса загрузки. Я хочу установить некоторые данные в текстовую область. Это мой код:

app.service('fileUpload', ['$http', function ($http) {
    this.uploadFileToUrl = function(file, uploadUrl, commentArea){
        var fd = new FormData();
        fd.append('file', file);
        $http.post(uploadUrl, fd, {
            transformRequest: angular.identity,
            headers: {'Content-Type': undefined}
        })
        .success(function(){
/*          commentArea.append('This is not working');
            commentArea = 'This is not working';
            $scope.outputImportObject = 'This is not working';
*/
            alert('The file was succesfully uploaded!');
        })
        .error(function(){
            alert('There was an error while inserting the file!');   
     });
    }
}]);

app.controller('UploadCtrl', ['$scope', 'fileUpload', function($scope, fileUpload){
    $scope.uploadFile = function(){
        $scope.outputImportObject = 'This is working';

        var file = $scope.myFile;
        var commentArea = $scope.outputImportObject;
        fileUpload.uploadFileToUrl(file, ws_url+'upload_excel.php',commentArea);
    };
}]);
  • 0
    Кроме того, вы должны использовать .then вместо .success и .error callbacks. Если я прав, они устарели сейчас. Читать Angular $http API для получения дополнительной информации
Теги:

1 ответ

1
Лучший ответ

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

ваш сервис должен выглядеть примерно так:

app.service('fileUpload', ['$http', function ($http) {
    this.uploadFileToUrl = function(file, uploadUrl, commentArea){
        var fd = new FormData();
        fd.append('file', file);
       return
        $http.post(uploadUrl, fd, {
            transformRequest: angular.identity,
            headers: {'Content-Type': undefined}
        })
    }
}]);

Так как, сам по себе сам по себе возвращает обещание, вы можете напрямую вернуть его, вместо того, чтобы делать свое обещание.

и ваш контроллер должен выглядеть следующим образом:

app.controller('UploadCtrl', ['$scope', 'fileUpload', function($scope, fileUpload){
    $scope.uploadFile = function(){
        $scope.outputImportObject = 'This is working';

        var file = $scope.myFile;
        var commentArea = $scope.outputImportObject;
        fileUpload.uploadFileToUrl(file, ws_url+'upload_excel.php',commentArea)
.then(doThisOnSuccess, doThisOnFailure);

function doThisOnSuccess(){

code for binding to text area should go here
}

function doThisOnFailure(){

}
    };
}]);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню