2016-10-31 4 views
0

У меня есть ответ от сервера в успехе, Как я могу отправить это контроллеру, который я попробовал тогда, но его ошибка бросания не определена, Как я могу достичь этой задачи?Как получить данные от углового обслуживания до контроллера?

service.js

angular.module('App').service('fileUpload', ['$http', function ($http) { 
    this.uploadFileToUrl = function(file, uploadUrl){ 
     var fd = new FormData(); 
     fd.append('file', file); 
     console.log('service called', fd); 
     $http.post(uploadUrl, fd, { 
      transformRequest: angular.identity, 
      headers: {'Content-Type': undefined} 
     }) 
     .success(function(resp){ 
     console.log('success',resp); 
     return resp; 
     }) 
     .error(function(){ 
     }); 
    } 
}]); 

controller.js

$scope.uploadFile = function(){ 
       var file = $scope.myFile; 
       // console.log('file is '); 
       // console.dir(file); 
       // console.log(file); 
       var uploadUrl = "/fileUpload"; 
       fileUpload.uploadFileToUrl(file, uploadUrl).then(function(resp){console.log(resp); 
}; 
      }; 

ответ

1

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

angular.module('App') 

.service('fileUpload', ['$http', function ($http) { 
    this.uploadFileToUrl = function(file, uploadUrl){ 
     // ... other code ... 
     // return the $http promise itself here 
     return $http.post(uploadUrl, fd, { 
      transformRequest: angular.identity, 
      headers: {'Content-Type': undefined} 
     }) 
    } 
}]) 

Тогда в вашем контроллере (.catch не является обязательным, но подходит для использования, если ваши ошибки с обещаниями $).

$scope.uploadFile = function(){ 
    // ... other code ... 
    var uploadUrl = "/fileUpload"; 

    fileUpload.uploadFileToUrl(file, uploadUrl) 
     .then(function(response) { console.log(response) }) 
     .catch(function(error) { console.log(error) }); 
}; 
+0

Спасибо, что разрешили проблему! – hussain

0

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

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

Измените ваш код так.

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

$scope.uploadFile = function() { 
    var file = $scope.myFile; 
    // console.log('file is '); 
    // console.dir(file); 
    // console.log(file); 
    var uploadUrl = "/fileUpload"; 
    fileUpload.uploadFileToUrl(file, uploadUrl) 
    .then(function(resp) { 
    console.log('Your response here', resp); 
    }); 
}; 
Смежные вопросы