2017-06-22 15 views
0

ng-repeatで角度1.6の画像アップロードを行っていますが、入力がマルチではありませんが、複数のng-repeated入力があり、画像がありますプレビュー作業だけでなく、行を追加する/行を削除すると、動作していないように見える唯一の事は、ファイルの入力が更新されない項目を削除する場合です(プレビューを適切に更新するコードがあります)。ここで私が働いているものです:プレビュー入力バインド付きng-repeatで角度ファイルをアップロード

<div ng-repeat="item in data.items track by $index"> 
    <input ng-model="item.fileinput" type="file" name="image_{{$index}}" id="image_{{$index}}" onchange="angular.element(this).scope().imageChoose(this)"/><i ng-click="removeEvent($index)" class="fa fa-trash fa-lg"></i> 
    <img ng-if="!item.thumb" class="preview-image-small" ng-src="/images/general/placeholder.jpg"</img> 
    <img ng-if="item.thumb" class="preview-image-small" ng-src="{{item.thumb}}"</img> 
</div> 

次のようにその後、私のコントローラで、私はimageChooseを扱う:

$scope.imageChoose = function (data) { 
var id = data.id.split("_"); 
id = id[id.length-1]; 
var elem = document.getElementById(data.id); 
if (typeof (FileReader) != "undefined") { 
    var reader = new FileReader(); 
    reader.onload = function (e) { 
    $scope.$apply(function() { 
     $scope.data.data.items[id].thumb = e.target.result; 
    }); 
    }; 
    reader.readAsDataURL(elem.files[0]); 
} else { 
    alert("This browser does not support FileReader."); 
} 
}; 

これは、適切に画像のプレビューを設定したときに、私は、彼らが再びライン上で削除を実行します-orderはevent.thumbのng-srcによって正しく認識されます。問題は、実際のファイル入力され、ここで、結合するか、または更新しない行を削除するためのコードは次のとおりです。

$scope.removeEvent = function (index) { 
$scope.data.items.splice(index, 1); 
}; 

私はなるように削除を入力し結合するか、または処理するための比較的簡単な方法がある願っています入力は正しいままです。事前に感謝の意を表します。

+1

私はあなたの問題を完全には理解していませんでしたが、DOMオブジェクトにデータを保存することは実際にそれを行う方法ではありません。とにかく、少し話題になってしまって申し訳ありませんが、ng-uploadのような問題のほとんどを解決したモジュールを使ってみませんか? https://github.com/danialfarid/ng-file-upload –

+0

そのライブラリは非常にきれいに見える/いいね、それが偶然にng-repeatをサポートするかどうか知っていますか?ああ、私の問題は "removeEvent"です。イメージのプレビューが正しく更新されたままになっている必要がありますが、イメージの入力はバインドされておらず、正しく更新されません。 – edencorbin

+1

についてはわかりませんが、何らかの理由でそれが動作しないとは思えません。この特定のパッケージを長い間使っていて、今まで私に失敗していませんでした。 –

答えて

1

track by $indexng-repeatを一緒に使用しているため、removeEventメソッドが機能しません。 This is a known side effect。削除するか、different track by expressionsを使用してください。

+0

これは問題を解決しました、ありがとう!また、代替ライブラリの提案に対するBenのおかげで、より良い/よりスムーズな統合のためにチェックアウトすることができます。 – edencorbin

関連する問題