Angularjs 多个 Dropzone 用于在单页上上传图像

2024-02-27

我使用 dropzone.js 进行多图片上传。当单个页面上只有一个 dropzone 时,它​​工作正常。但是,如果我尝试在单个页面上使用多个拖放区,则只有一个拖放区正在工作,即第二个拖放区,而第一个拖放区保持空闲。我试图寻找答案,但它们只与 javascript 相关,不适用于Angularjs。 下面是我附上的代码以供参考。

HTML
第一空降区

<div id="dropzone2" name="form_16" data-ng-model="itr.form_16" class="dropzone sm"
                                 options="form16Options" methods="form16Methods"
                                 callbacks="form16Callbacks" dz-form16></div>
                            <br>
                            <div style="text-align:center;" id="startUpload" ng-show="showBtns">
                                <button class="btn btn-default" ng-click="form16Methods.processQueue();">Upload All
                                </button>
                                <button class="btn btn-blue" ng-click="form16Methods.removeAllFiles();">Remove All
                                </button>
                            </div>

第二空降区

<div id="loan_certificate" name="loan_certificate" data-ng-model="itr.loan_certificate"
                                 class="dropzone sm" options="loanOptions" methods="loanMethods"
                                 callbacks="loanCallbacks" dz-loan-certificate></div>
                            <br>
<div style="text-align:center;" ng-show="showBtns">
<button class="btn btn-default" ng-click="loanMethods.processQueue();">Upload All
</button>
<button class="btn btn-blue" ng-click="loanMethods.removeAllFiles();">Remove All

控制器

angular.extend($scope, {

        first: true,
        showBtns: false,
        lastFile: null,
        dzMethods: {},
        dzOptions: {
            url: $API.POST_ITR_IMAGE,
            dictDefaultMessage: '<i class="fa fa-plus"></i> Drop image or click to choose image',
            parallelUploads: 4,
            autoProcessQueue: false,
            acceptedFiles: 'image/jpeg, images/jpg, image/png',
            addRemoveLinks: true,
            uploadMultiple: true,
            dictCancelUpload: '',
            maxFilesize: '2',
            // maxFiles: 4,
        },
        dzCallbacks: {
            'addedfile': function (file, xhr, formData) {
                $scope.showBtns = true;
                $scope.lastFile = true;
            },
            'sendingmultiple': function (file, xhr, formData) {
                formData.append("_token", csrfToken);
                formData.append("id", $scope.itr.id);
                formData.append("form_16", $scope.itr.form_16);

                console.log(file);
            },
            'successmultiple': function (file, result) {
                if (result.success) {
                    $scope.pop_gallery = {images: result.image};
                    console.log($scope.pop_gallery);
                }
            },
            'error': function (file, xhr) {
                if (file.size > 2 * 1000) {
                    alert(xhr);
                }
                console.warn('File failed to upload from dropzone 2.', file, xhr);
            },
            'completemultiple': function (file) {
                angular.forEach(file, function (value, key) {
                    $scope.dzMethods.removeFile(value);
                });
            },
            'queuecomplete': function (file) {
                $scope.showBtns = false;
                $scope.lastFile = null;
                //  $scope.dzMethods.removeAllFiles();
            }
        },

指示

.directive('ngDropzone', ['$timeout', 'dropzoneOps', function ($timeout, dropzoneOps) {
    return {
        restrict: 'AE',
        template: '<div></div>',
        replace: true,
        scope: {
            options: '=?', //http://www.dropzonejs.com/#configuration-options
            callbacks: '=?', //http://www.dropzonejs.com/#events
            methods: '=?' //http://www.dropzonejs.com/#dropzone-methods
        },
        link: function (scope, iElem, iAttr) {
            //Set options for dropzone {override from dropzone options provider}
            scope.options = scope.options || {};

            var initOps = angular.extend({}, dropzoneOps, scope.options);

            if (iAttr.hasOwnProperty('name'))
                angular.extend(initOps, {paramName: iAttr.name});
            //Instantiate dropzone with initOps
            var dropzone = new Dropzone(iElem[0], initOps);


            /*********************************************/


            //Instantiate Dropzone methods (Control actions)
            scope.methods = scope.methods || {};
            scope.methods.getDropzone = function () {
                return dropzone; //Return dropzone instance
            };

            scope.methods.getAllFiles = function () {
                return dropzone.files; //Return all files
            };

            var controlMethods = [
                'removeFile', 'removeAllFiles', 'processQueue',
                'getAcceptedFiles', 'getRejectedFiles', 'getQueuedFiles', 'getUploadingFiles',
                'disable', 'enable', 'confirm', 'createThumbnailFromUrl'
            ];

            angular.forEach(controlMethods, function (methodName) {
                scope.methods[methodName] = function () {
                    dropzone[methodName].apply(dropzone, arguments);
                    if (!scope.$$phase && !scope.$root.$$phase)
                        scope.$apply();
                }
            });


            /*********************************************/


            //Set invents (callbacks)
            if (scope.callbacks) {
                var callbackMethods = [
                    'drop', 'dragstart', 'dragend',
                    'dragenter', 'dragover', 'dragleave', 'addedfile', 'removedfile',
                    'thumbnail', 'error', 'processing', 'uploadprogress',
                    'sending', 'success', 'complete', 'canceled', 'maxfilesreached',
                    'maxfilesexceeded', 'processingmultiple', 'sendingmultiple', 'successmultiple',
                    'completemultiple', 'canceledmultiple', 'totaluploadprogress', 'reset', 'queuecomplete'
                ];
                angular.forEach(callbackMethods, function (method) {
                    var callback = (scope.callbacks[method] || angular.noop);
                    dropzone.on(method, function () {
                        callback.apply(null, arguments);
                        if (!scope.$$phase && !scope.$root.$$phase)
                            scope.$apply();
                    });
                });
            }
        }
    }
}])
.provider('dropzoneOps', function () {
    /*
     *  Add default options here
     **/
    var defOps = {
        //Add your options here
    };

    return {
        setOptions: function (newOps) {
            angular.extend(defOps, newOps);
        },
        $get: function () {
            return defOps;
        }
    }
})

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angularjs 多个 Dropzone 用于在单页上上传图像 的相关文章

  • AngularJS 服务位于单独的文件中

    我的 app js 包含 var app angular module myApp config routeProvider function routeProvider http 服务看起来像 app service MyService
  • Angular js gulp sourcemap ngannonate 和 babel 中 JavaScript 堆内存不足

    我在我的 Angular JS 项目中使用 es6 语法 但运行时会抛出错误gulp build 在 github 上搜索 但是有些人说这是由于 gulp uglify 导致的错误 而有些人说这是 babel 问题 其他人说这是 ng an
  • 如何让 AngularJS 绑定到 A 标签的 title 属性?

    目的是让产品名称出现在缩略图的工具提示中 浏览器不会从 ng title 或 ng attr title 创建工具提示 我们使用 AngularJS 版本 1 0 7 您可以在任何属性前面添加 ng 或 ng attr Angular 将进
  • WebSocket 连接失败:WebSocket 握手期间出错:意外的响应代码:400

    我正在尝试将 Socket io 与 Angular 集成 但在从客户端到服务器建立连接时遇到困难 我查看了其他相关问题 但我的问题发生在本地 所以中间没有网络服务器 这就是我的服务器代码的样子 const app express cons
  • AngularJS'无法读取未定义的'then'属性'

    我遇到这个问题 当我单击登录按钮时 chrome 控制台会记录以下内容 angular min js 117 TypeError 无法读取未定义的属性 then 在 m scope logIn loginModuleController j
  • 如何将 ng-repeat 与图像映射区域标签一起使用?

    我正在尝试使用 AngularJS 创建可点击的汽车配置文件 一旦我将区域标签属性移动到 auto parts json 并将它们与 ng repeat 中的适当属性绑定 那么它就无法工作 如何修复它 请在全页预览中测试元素 var app
  • 选项卡的 AngularJS 控制器

    我的页面中有三个选项卡 我在用着tabset and tab根据Angular 引导文档 https angular ui github io bootstrap tabs 我设置了一个控制器 div 其中有tabsetas div cla
  • Angular ui-router:链接不可点击

    我尝试运行 angular ui router 来处理我的视图 但我遇到了问题 以下视图的两个链接不可点击 带有链接标签的角度更改变量 但我无法单击 我有这样的观点 h1 App h1
  • 离子动态列表分隔符

    我已经被这个问题困扰了一段时间 所以我希望你能让我朝正确的方向前进 我的角度工厂返回一个看起来像这样的对象 name Fall year 20xx id some id 这是一个学期列表 每个学期都有一个对象 其中包含名称 年份和学期 ID
  • angular.copy() 和 JSON.parse(JSON.stringify()) 之间的区别?

    有人可以解释 angular copy 和 JSON parse JSON stringify 之间的区别吗 有吗 您会推荐使用什么 angular fromJson angular toJson 与 JSON parse JSON str
  • Chart.js 没有显示在我的视图中

    我有一个使用 angular js 运行的应用程序 我的视图之一应该加载图表 我正在使用 Chart js 但由于某种原因它不起作用 并且我的控制台上没有显示错误 这是我创建图表的函数 scope writeBatteryChart fun
  • 避免 AngularJS 部分视图在 IE 中缓存

    我正在开发一个 ASP NET MVC 应用程序 它也有一些 angularJS 我有一个主页 其中有不同的选项卡 当您单击它们时 它们会加载角度部分视图 主页是这样的 div class widget div div class widg
  • AngularUI Router:在调用子状态时将 url 参数传递给“抽象”状态

    我想在调用子状态时访问抽象状态内的 url 参数 stateParam 我很想知道如何做到这一点 代码在笨蛋也 http plnkr co edit L0TXx3DCBOJmh4XydXbV p preview stateProvider
  • 如何检查摘要周期是否稳定(又名“Angular 完成编译了吗?”)

    tl dr 最初的问题是 如何在每个摘要周期触发回调 但潜在的问题更有趣 因为这回答了两个问题 所以我继续修改了标题 Context 在解决了所有依赖项 nginclude API 调用等之后 我试图控制 Angular 何时完成 HTML
  • 如何在 Angularjs 中正确将 JSON 响应解析为 ng-repeat

    我希望能够使用ng repeat为了解析我在前端的响应 我在解析具有多个项目与单个项目的响应时遇到问题ng repeat list 我能够解析 但我必须创建 2 个不同的列表ng repeat在前端进行配置并添加一些丑陋的逻辑 以便在数组长
  • 角度观察周期或摘要周期完成时如何调用函数

    在 Angular 完成所有监视周期后 有什么方法可以调用 Angular 中的自定义函数 要求 我的控制器内有多种手表功能 现在我只想在所有手表函数都由角度执行后才执行函数 摘要完成后 有几种方法可以注册回调 Using postDige
  • 如何将除 Web API 之外的所有内容路由到 /index.html

    我一直在研究一个AngularJS项目 在 ASP NET MVC 内部使用 Web API 除非您尝试直接访问有角度的路由 URL 或刷新页面 否则它效果很好 我认为这将是我可以处理的事情 而不是胡闹服务器配置MVC的路由引擎 当前的We
  • 按 ng-repeat 中的对象键排序

    如何按整数键排序 我有以下对象 scope data 0 data ZERO 1 data ONE 2 data TWO 3 data TREE 5 data FIVE 6 data SIX 10 data TEN 11 data ELEV
  • 是否可以动态导入模块?

    我有很多角度组件的导入 看起来我可以编写一个函数来简化导入 我只是不知道怎么做 但这应该很简单 进口样本 import DashboardComponent from app components dashboard dashboard c
  • AngularJS 中的嵌套模块

    我有 2 个不同的 AngularJs 模块 一个 widgetContainer 和一个 widget 小部件可以显示为独立的应用程序 也可以包含在小部件容器中 一个 widgetContainer 包含 0 N 个 widget 如果我

随机推荐

  • Rails 迁移使列为 null => true

    我最初创建了一个表 其中列为 t string email default gt null gt false 要求已更改 现在我需要允许电子邮件为空 如何编写迁移以使 null gt true change column null http
  • 根据向量更改列的类别

    我有 2 个数据框 主要的一个df 另一个数据框tmp它描述了列类型df和新格式应转换哪些列 这是一个可重现的示例 df lt data frame var1 c a b c var2 c 1 2 3 var3 c d e f tmp lt
  • Clojure 的惰性如何与 Java/不纯代码的调用交互?

    今天我们在代码中偶然发现了一个问题 无法回答这个 Clojure 问题 Clojure 是严格还是惰性地评估不纯代码 或对 Java 代码的调用 似乎副作用 惰性序列会导致奇怪的行为 以下是我们所知道的导致这个问题的信息 Clojure 有
  • formfield_for_foreignkey 和内联管理

    我只想展示特定比赛中与球队相关的球员 通常 当我这样做时 它会向我显示数据库中的所有球员 这是我的 models py class InningsCard models Model fixture models ForeignKey Fix
  • 构建 Django Webapp 前端的“最佳”方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 提前致谢 这更像是一个 哲学 问题 而不是直接请求对代码的意见 尽管我非常感谢任何人对代码示例的输入 从我记事起 我就一直是一名 传统 开发人员
  • 在 iOS 7 中设置 UINavigationBar 动画(如 Safari)

    在 Safari 中滚动内容时 标题栏会以动画形式显示为较小版本 实现这一点的最佳方法是什么 目前 我正在更改框架的大小 如下所示 void scrollViewDidScroll UIScrollView scrollView Table
  • 发送电子邮件需要设置哪些 php.ini 参数? [复制]

    这个问题在这里已经有答案了 我想从我的 PHP 代码发送电子邮件 但收到警告消息 那么 php ini 参数要设置哪些呢 要检查 更改您的 PHP 邮件配置 打开 php ini 文件 如果您不知道它在哪里 请参见下文 搜索显示为 邮件功能
  • Visual Studio 2010 关闭确认

    我希望VS2010在我关闭整个环境时询问我是否确定要关闭VS2010 不幸的是我在任何地方都找不到这个设置 有人知道吗 AFAIK 没有这样的选择 然而 有一个古老的工具 叫做NoClose http www donationcoder c
  • 如何在 HTML 中实现“全选”复选框?

    我有一个带有多个复选框的 HTML 页面 我还需要一个名为 全选 的复选框 当我选择此复选框时 必须选择 HTML 页面中的所有复选框 我怎样才能做到这一点
  • 从 iframe 中重定向到

    我有一个 Rails 应用程序 它有一个在 iframe 中呈现的表单 并且从我想要的创建操作中redirect to在 iframe 之外并重新渲染整个页面 而不是在 iframe 中 我很好奇有什么想法可以实现这一目标 你能行的 你必须
  • 使用 SymPy codegen 为方程组生成 Fortran 子例程

    以我发现的以前的例子为基础here https stackoverflow com questions 25327845 how to generate fortran subroutine with sympy codegen 我尝试找出
  • 如何在 WordPress 中将 HTML 表单中的数据保存到数据库表中?

    我有一个 WordPress 主题 我正在尝试将 HTML 表单中的数据保存到数据库中 我制作了 HTML 表单并添加了一个 保存并关闭 按钮 该按钮调用名为的 JavaScript 函数saveData 从表单中获取数据并将其发送到add
  • 如何删除 Apple APNS 反馈收到的设备令牌

    我成功通过 PHP 获取 Apple APNS 反馈数据 我得到的结构 经过一些处理 看起来像这样 时间戳 设备令牌 我的问题是如何知道应该从数据库中删除哪些设备令牌并停止向它们发送通知 Regardz Mladjo 时间戳是这里的关键元素
  • 如何从React中的函数参数设置状态[重复]

    这个问题在这里已经有答案了 我将名称和值从子组件传递给handleChange 函数 现在我想将状态设置为与提供的名称匹配的值 但我不知道如何设置 我尝试了这种方式 但它给出了错误 this setState 不是函数 class Pare
  • MySQL 作业启动失败

    我在 Kubuntu 12 04 上 通过 apt get 安装 mysql mysql 版本 5 5 35 后 我尝试启动 mysql 服务 但出现此错误 sudo 服务 mysql 启动 开始 作业启动失败 所以我用谷歌搜索了这个问题
  • 循环分组依据、聚合并根据组创建新列

    我正在尝试获取学生专栏 根据他们的进度水平来统计活动 Data looks like STUDENT ID STUDENT ACTIVITY SESSION ID NODE NAME ACTIVITY NAME prog level Fre
  • 从 JSF 操作返回 null 和 "" 之间的区别

    据我了解 当 JSF 操作返回时 空字符串 用户停留在当前页面 但视图已刷新 然而 当动作返回时null用户仍然停留在当前页面 但旧视图被重用 我的问题是 上述说法正确 准确 吗 如果是 那么这意味着什么 具体来说 使用其中一种与另一种对页
  • Python图像库椭圆具有宽轮廓

    用PIL创建椭圆时 是否可以有更粗 更宽的轮廓 目前 我正在尝试做canvas ellipse box outline colour fill None 但希望能够给予outline参数a宽度 你可以使用aggdraw http effbo
  • 将行数组转换为列数组

    将任何 等长 行数组转换为列数组的最优雅的方法是什么 Eg 1 2 3 4 5 6 To 1 4 2 5 3 6 这是我到目前为止所拥有的 grid 1 2 3 4 5 6 grid2 for i in grid 0 grid2 push
  • Angularjs 多个 Dropzone 用于在单页上上传图像

    我使用 dropzone js 进行多图片上传 当单个页面上只有一个 dropzone 时 它 工作正常 但是 如果我尝试在单个页面上使用多个拖放区 则只有一个拖放区正在工作 即第二个拖放区 而第一个拖放区保持空闲 我试图寻找答案 但它们只