2017-08-06 5 views
2

多くのチュートリアルを終えたが、状況を正しく処理する方法を理解できていない。ご覧になり、この問題のトラブルシューティングを手伝ってください。ファイル入力をAngularJSでリセットする

jsonファイルをアップロードしたフォームを送信します。次に、「送信」ボタンがクリックされるとすぐにファイル入力フィールドをリセットします。

メソッドclearData()は、データベースからのデータの削除要求を送信しますが、ファイル入力フィールドのみを消去したいとします。ここで

は私のフォームのレイアウトです:

<form id="json-upload-form" name="jsonUploadForm" enctype="multipart/form-data"> 
    <div class="row"> 
     <div class="col-md-12 json-upload-file"> 
     <div class="fileinput fileinput-new" data-provides="fileinput"> 
      <span class="choose-file-label">Select JSON file</span> 
      <span class="btn btn-default btn-file uui-button"> 
      <span class="fileinput-new">Choose file</span> 
      <span class="fileinput-exists">Change file</span> 
      <input type="file" name="files" file-model="json.file"/> 
      </span> 
      <span class="fileinput-filename" ng-model="filename"></span> 
      <a href="#" class="close fileinput-exists" data-dismiss="fileinput">×</a> 
     </div> 
     <button class="uui-button green" id="json-upload-button" ng-click="submit()">Upload file</button> 
     </div> 
    </div> 
    <div class="row"> 
     <div class="col-md-12"> 
     <button type="button" class="uui-button green" id="json-clear-button" ng-click="clearData()">Clear data</button> 
     </div> 
    </div> 
</form> 

ここで私は、ファイルの値に探し指示している:

angular.module('adminSmokeReportsApp') 
.directive('fileModel', [ 
    '$parse', 
    function ($parse) { 
     return { 
      restrict: 'A', 
      link: function (scope, element, attrs) { 
       var model = $parse(attrs.fileModel); 

       element.bind('change', function() { 
        model.assign(scope, element[0].files[0]); 
        scope.$apply(); 
       }); 
      } 
     } 
    }]); 

はここでデータをポストサービスが来ます

angular.module('adminSmokeReportsApp') 
.service('multipartForm', [ 
    '$http', 
    function ($http) { 
     this.post = function (uploadUrl, data) { 
      var formData = new FormData(); 
      formData.append("files", data.file); 

      $http.post(uploadUrl, formData, { 
       transformRequest: angular.identity, 
       headers: { 
        'Content-Type': undefined 
       } 
      }); 
     } 
    }]); 

最後に、アクションを処理するコントローラ:

angular.module('adminSmokeReportsApp') 
.controller('JsonUploadCtrl', [ 
    '$scope', 
    'config', 
    'multipartForm', 
    function ($scope, config, multipartForm) { 
     $scope.clearData = function() { 
      $.ajax({ 
       url: config.clearTestDataUrl, 
       success: function() { 
        alert("All data cleared!"); 
       } 
      }); 
     }; 

     $scope.json = {}; 

     $scope.submit = function() { 
      var uploadUrl = config.jsonUploadFormUrl; 
      multipartForm.post(uploadUrl, $scope.json); 
     }; 
    }]); 

私は最初の状態を保存してから、次にangular.copyを使用して変更を加える方法を試しました。結局、myForm。$ setPristine()はそのトリックをしていないようです。

また、要素にval()を呼び出してnullに設定したいと考えました。成功もありません。このディレクティブで関数を使用するとうまくいくが、アップロードメソッドが実行される瞬間に起こる。

ご覧のとおり、私は初心者ですが、解決策もあるかもしれませんが、それを適用する正しい方法については考えていません。ありがとう!

答えて

0

右の手順は、ビューからバインドされたデータをすべて消去して、$scopejsonUploadFormsetPristine()を使用することです。 $scope上の単一のモデルオブジェクトにすべてのバインディングを保持し、nullに設定することをお勧めします。

詳細については、この答えを参照してください: Resetting form after submit in Angularjs

+0

は私の愚かさをすみません、私はモデル化するために正確に何を保存する必要がありますか?これらのヒントは私を助けませんでした。タイプ "ファイル"の入力に対してng-modelが機能しないことを修正しましたか? –

+0

実用的なフィドルを追加してください。完全な例をお伝えします。 [Here](https://jsfiddle.net/masa671/369x3gjj/)は、それがどのように行われたかの例を示したフィドルです。 –

関連する問題