2017-06-30 13 views
0

複数のファイルのアップロードはangularjsでうまく動作しますが、私の.then()関数内でファイル名を取得できません。 ! AngularJs複数のファイルをアップロードする.then

この

は私のアップロードファイル機能である:

それがうまく機能
$scope.uploadFile = function(files,destinationPhp) { 

    $scope.montrerLoader = true; 

    for (var x=0;x<files.length;x++){ 

     var fd = new FormData(); 
     //Take the first selected file 
     fd.append("file", files[x]); 

     console.log(files[x].name); 
     var uploadUrl = destinationPhp; 

     $http.post(uploadUrl, fd, { 
      withCredentials: true, 
      headers: {'Content-Type': undefined }, 
      transformRequest: angular.identity 
     }).then(function(data){ 
      $scope.montrerLoader = false; 
      if(data.data.reponse=='ok'){ 

       if(destinationPhp=='uploadFichier.php'){ 
        Notification.success('Fichier transféré!'); 
        $scope.rendezVous.fichiers.push({'nom':files[x].name}); 
       } 
      } 
      else{ 

       Notification.error(data.data.reponse); 
      } 

     }); 

    } 

}; 

、ファイルは私のサーバーのディレクトリにアップロードしますが、問題は私が必要とするこの行を次のとおりです。

$scope.rendezVous.fichiers.push({'nom':files[x].name}); 

I

TypeError: files[x] is undefined 

私はファイル名をTEMPに入れようとしたように、たくさん試しました。 var、それは決して認識されない、または結局は常に同じ名前ファイルをプッシュします(これはロジックではありません)。

$ scope.rendezVousにアップロードした後にファイル名をプッシュする方法はありますか?

console.log(files[x].name); 

私の放火魔コンソール内部の権利のファイル名を表示!!:

illerは、この行があることですしかし、私が内部で使用しようとする限り、()その後、それは動作しません!

答えて

0

forループ内で非同期呼び出しを試みているので、IIFEを使用しています。したがって、IIFEの中に$ httpを囲むことは、forループのiのすべての値で実行させます&ファイルオブジェクトはそのコールバックで定義されません。このサンプル

for (var index = 1; index <= files.length; index++) {  
    (function(index) { 
     $timeout(function() { 
     console.log("index : "+index); 

     alert("file name : "+files[index-1].name); 
     }, index * 500); 
    })(index); 
} 

http://plnkr.co/edit/7ZclGB93Soq5Ce8pFmkQ?p=preview

ここ

私は$タイムアウトを使用してモック非同期呼び出しを追加しましたを確認し、&は、生命維持構造を持つforループの内側にそれを使用しました。その非同期呼び出しのIIFEラッパーをコメントアウトするだけで、状況を確認できます。

関連する問題