Javascript 首次上载后禁用墨水文件选择器拖放窗格
我在指令中使用Javascript 首次上载后禁用墨水文件选择器拖放窗格,javascript,angularjs,drag-and-drop,angularjs-directive,filepicker.io,Javascript,Angularjs,Drag And Drop,Angularjs Directive,Filepicker.io,我在指令中使用filepicker.makeDropPane()将带有ng模型的任何div生成一个放置窗格,该放置窗格将生成的InkBlob保存到ngModel中 angular.module("app", []).directive("dropzone", function () { return { require: "ngModel", link: function (scope, element, attrs, ngModel) { filepicker
filepicker.makeDropPane()
将带有ng模型的任何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
log消息将不再被调用,这很奇怪,因为我希望禁用的拖放窗格将充当浏览器窗口的其余部分,因此,将文件拖动到其中将只在给定选项卡中打开该文件。但是在第一次成功上传后将文件拖到元素上根本不会做任何事情——既不会调用dragEnter
,dragLeave
,onStart
,onSuccess
也不会调用onError
函数,但浏览器也不会打开文件。当将文件拖动到给定元素以外的其他位置时,浏览器会打开该文件
我怀疑angular可能在这里对指令模板做了一些事情,这会弄乱下拉窗格配置,因此我尝试通过执行$compile(element)(scope)
在onSuccess
中重新编译指令,但这没有任何效果
是什么导致了这种行为?如果我有任何反馈,这会更有意义,但在第一次成功上传后,绝对不会调用提供的回调函数。我仍然不知道发生这种情况的根本原因,下面可能只是一个小技巧,但以防其他人也遇到类似情况,我就是这样修好的
我没有将带有该指令的元素放入放置窗格(filepicker.makeDropPane(angular.element(element)[0],…
),而是以编程方式在元素内部创建一个子div
,并将其配置为放置窗格:
function create_pane () {
var pane = angular.element("<div/>");
element.append(pane);
configure_pane(angular.element(pane)[0]);
}
function configure_pane (pane_node) {
filepicker.makeDropPane(pane_node, {
onSuccess: save_img,
...
});
}
我是从你那里得到这个主意的
function save_img (InkBlobs) {
...
reset_pane();
}
function reset_pane () {
emptyNode(angular.element(element)[0]);
create_pane();
}