2016-06-30 7 views
0

$ q.defer()를 사용하여 함수에서 얻은 $ http.post를 통해 데이터를 보내는 방법을 묻습니다.

<input type='text' ng-model='name'/> 
<input type='file' id='inputFile' /> 
<button ng-click='save'>Save</button> 

자바 스크립트

HTML

file = document.getElementById('inputFile'); 

function imgToBase64(file_input) { 
    var deferred = $q.defer(); 
    if (file_input.files && file_input.files[0]) { 
     var fileReader = new FileReader(); 
     fileReader.onload = function (event) { 
      result = event.target.result; 
      deferred.resolve(result); 
     }; 
     fileReader.readAsDataURL(file_input.files[0]); 
    } 
    return deferred.promise; 
}; 

imgToBase64(file).then(function(result){ 
    $rootScope.result = result; 
}); 

POST 요청

: 여기

코드의 비트입니다3210
$http.post(apiURL, { 
    name: $scope.name, 
    image: $rootScope.result 
}).success(function(data) { 
     console.log(data); 
}) 

문제는 '저장'을 누르면 'name'의 콘텐츠가 전송되지만 $ rootScope.result는 비어 있습니다. $ rootScope.result를 console.log()에 넣었을 때 결과를 볼 수 있지만 게시물에는 비어 있습니까? 무엇이 잘못 될 수 있습니까? 감사

답변

1

이 당신이 원하는 경우 나도 몰라 :

$scope.save = function() { 
    imgToBase64(file).then(function (result) { 
     $rootScope.result = result; 
     $http.post([...]); 
    }); 
} 
+0

야호를! 잘 했어 :) – marek