Plunker demonstrating codeangular.bind()關於 '下降' 事件偵聽器無法正常運行
我與指令集dragAndDrop
作爲屬性一個<div>
元件:
<div ng-class="divClass" drag-and-drop>Drop files here</div>
(作爲側,並不太重要的注意事項,ng級不表現如預期,但這是一個separate issue) 我想用戶將文件從桌面拖放到div。儘管如此,我使用angular.bind()
來檢測放置事件。當然,一旦他們下降,我打電話e.stopPropagation()
和e.preventDefault()
,但頁面繼續,不管重定向頁面。我做錯了什麼會阻止上述兩種方法的執行?
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]);
}
}
});
}
};
});
這兩個問題都無效。我已經更新了這個活塞,以反映你的建議。至於'$ scope。$ apply()',我推測這是不必要的,因爲當使用諸如'.addEventListener()'或'elem之類的東西時,放在元素上的'angular.bind()'方法會保留範圍.ondrop = function()'不會。我錯了嗎? – Scott 2013-03-21 14:04:13
'$ scope。$ apply'(你錯過了'$')修復了css類的問題。 (當我回家時,請看看另一個問題。) – Martin 2013-03-21 15:15:13
Doh!接得好。奇怪的是,我似乎回憶起之前根據其他地方的建議進行嘗試。我一定是在其他地方犯了個錯誤,或者根本沒有嘗試過。無論如何,謝謝。期待着解決方案。 – Scott 2013-03-21 15:21:28