Angular Service Function如何返回对控制器的响应

时间:2016-07-23 12:10:36

标签: angularjs laravel laravel-5.2

实际上,我正在使用服务上传图片,图片上传成功,但我希望在控制器中对该功能进行响应。

控制器:

adminApp.controller('imageController', ['$scope', 'fileUpload', 'Images',function ($scope, fileUpload, Images) {

$scope.uploadFile = function (data) {
    console.log(data);

    var file = data.myFile;
    console.log('file is ');
    console.dir(file);
    var uploadUrl = "/image";
    fileUpload.uploadFileToUrl(file, data, uploadUrl);
    // $scope.images.push();

  };
}]);

服务:

adminApp.service('fileUpload', ['$http', function ($http) {

this.uploadFileToUrl = function (file, data, uploadUrl) {
    var fd = new FormData();
    fd.append('file', file);
    fd.append('owner_id', data.owner_id);
    $http.post(uploadUrl, fd, {
            transformRequest: angular.identity,
            headers: {'Content-Type': undefined}
        })
        .success(function (data) {
            // return data;
        })
        .error(function () {
        });
  }
}]);

laravel(反手):

public function store(Request $request)
{
    $image = $request->file('file');
    $image = $this->imageRepository->makeImage($image);
    return $image;
}

我在服务中运行将反手数据从反手返回到控制器,因此我可以将值推送到控制器功能中的$scope.images

1 个答案:

答案 0 :(得分:1)

您可以在此处利用角度$q

更新了服务功能

this.uploadFileToUrl = function (file, data, uploadUrl) {
    var defer = $q.defer();

    var fd = new FormData();
    fd.append('file', file);
    fd.append('owner_id', data.owner_id);
    $http.post(uploadUrl, fd, {
            transformRequest: angular.identity,
            headers: {'Content-Type': undefined}
        })
        .success(function (data) {
            // return data;
           defer.resolve(data);
        })
        .error(function (error) {
            defer.reject(error);
        });
  }

return defer.promise;

}]);

在您的控制器中,您可以将此功能用作

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

    //response contains your data form service

}).catch(function(error){

    // error variable contains error data from service.

});

代码未经过测试..但它应该工作或非常接近。