【发布时间】:2014-05-19 13:24:24
【问题描述】:
我在指令中使用filepicker.makeDropPane() 将带有ng-model 的任何div 放到一个拖放窗格中,该窗格将生成的InkBlob 保存到ngModel。
angular.module("app", []).directive("dropzone", function () {
return {
require: "ngModel",
link: function (scope, element, attrs, ngModel) {
filepicker.makeDropPane(angular.element(element)[0], {
dragEnter: function () {
console.log("Entered dropzone");
},
onSuccess: function (InkBlobs) {
ngModel.$setViewValue({
key: InkBlobs[0].key,
url: InkBlobs[0].url
}
}
});
}
}
});
第一次拖放上传会起作用,但一旦成功上传,任何进一步的拖放尝试都将无济于事。
dragEnter 日志消息将不再被调用,这很奇怪,因为我希望禁用的下拉窗格充当浏览器窗口的其余部分,将文件拖到它上面只会打开该文件给定的选项卡。但是在第一次成功上传后将文件拖到元素上根本不会做任何事情——dragEnter、dragLeave、onStart、onSuccess 和 onError 函数都不会被调用,但浏览器不会打开文件。将文件拖动到给定元素以外的位置时,浏览器确实会打开文件。
我怀疑 angular 可能会在此处使用指令模板进行某些操作,这会破坏拖放窗格配置,因此我尝试通过执行 $compile(element)(scope) 重新编译 onSuccess 中的指令,但这没有效果。
什么可能导致这种行为?如果我有任何反馈会更有意义,但在第一次成功上传后绝对不会调用提供的回调函数。
【问题讨论】:
标签: javascript angularjs drag-and-drop angularjs-directive filepicker.io