2016-12-03 39 views
0

工作,我有这个简单的服务。然后不经过呼叫服务功能

angular.module('tadeluApp') 
    .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){ 

      return data.url; 

     }) 

     .error(function(){ 
     }); 
    } 
}]); 

这只是在控制器我所说的服务和功能的图像上传到服务器,现在“uploadFileToUrl”。

self.uploadFile = function(){ 
    var file = self.myFile; 

    // console.log('file is '); 
    // console.dir(file); 

    var uploadUrl = "http://111.11.11.11/api/upload/"; 

    fileUpload.uploadFileToUrl(file, uploadUrl).then(function(data) { 

    console.log('test data ->', data); 

    }); 

    console.log(dataInfo.image); 

}; 

---> server response <---

的问题是,我需要接受这个职位在我的控制器的响应,我尝试使用。于是函数中调用服务功能在我的控制器之后,却没有工作。一些帮助?谢谢!

回答

0

您需要返回正在生成的承诺并由$http返回,以保证承诺链持续。提供的代码实际上并没有在致电uploadFileToUrl()时返回Promise。

this.uploadFileToUrl = function(file, uploadUrl){ 
    var fd = new FormData(); 
    fd.append('file', file); 

    return $http.post(uploadUrl, fd, { 
     transformRequest: angular.identity, 
     headers: {'Content-Type': undefined} 
    }) 
    .then(function(data) { 
     return data.url; 
    }) 
    .catch(function(err) { 
     // Handle error 
    }); 
} 
+0

非常感谢!完美地工作 –