Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 首次上载后禁用墨水文件选择器拖放窗格_Javascript_Angularjs_Drag And Drop_Angularjs Directive_Filepicker.io - Fatal编程技术网

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();
}