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