2016-07-23 8 views
0

Eigentlich lade ich Bild mit Service, Bild hochgeladen erfolgreich, aber ich möchte reagierte Daten auf die Funktion in der Steuerung.Wie kann Angular Service Function Antwort auf Controller zurückgeben

Controller:

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(); 

    }; 
}]); 

Service:

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 (Rückhand):

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

ich in Service Rückkehr funktionieren reagierte Daten von Rückhand an die Steuerung, so kann ich drücken der Wert auf $scope.images in Controller-Funktion.

Antwort

1

Sie können Winkel $q hier nutzen.

Aktualisiert Servicefunktion

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; 

}]); 

In Ihrem Controller, können Sie die Funktion als

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

    //response contains your data form service 

}).catch(function(error){ 

    // error variable contains error data from service. 

}); 

verwenden Sie den Code nicht getestet .. aber es sollte oder ganz in der Nähe arbeiten.

+0

Fehler wird angezeigt, angular.min.js: 92 TypeError: Eigenschaft 'defer' von undefined kann nicht gelesen werden –

+1

In Ihrem Service müssen Sie defer 'adminApp.service ('fileUpload', ['$ http', '$ q ', Funktion ($ http, $ q) ' –

+0

enthalten, dann nach der Anzeige, ** TypeError: Kann Eigenschaft' Defer 'von undefined nicht lesen ** –

Verwandte Themen