<div>
ディレクティブdragAndDrop
が属性として設定された要素があります。
<div ng-class="divClass" drag-and-drop>Drop files here</div>
(余談ですが、それほど重要ではありませんが、ng-class は期待どおりに動作していませんが、それは別の問題です)
私が望むのは、ユーザーがデスクトップから div にファイルをドラッグ アンド ドロップすることです。ただし、そうするとangular.bind()
、ドロップイベントを検出するために使用します。もちろん、ドロップしたらe.stopPropagation()
andを呼び出しe.preventDefault()
ますが、ページはページのリダイレクトを続行します。前述の2つの方法が実行されない原因は何ですか?
dragAndDrop
指令:
directive('dragAndDrop', function() {
return {
restrict: 'A',
link: function($scope, elem, attr) {
elem.bind('dragenter', function(e) {
e.stopPropagation();
e.preventDefault();
// still can't get this one to behave:
// https://stackoverflow.com/q/15419839/740318
$scope.divClass = 'on-drag-enter';
});
elem.bind('dragleave', function(e) {
e.stopPropagation();
e.preventDefault();
$scope.divClass = '';
});
elem.bind('drop', function(e) {
var droppedFiles = e.dataTransfer.files;
// It's as though the following two methods never occur
e.stopPropagation();
e.preventDefault();
if (droppedFiles.length > 0) {
for (var i=0,ii=droppedFiles.length;i<ii;i++) {
$scope.files.push(droppedFiles[i]);
}
}
});
}
};
});