AngularJS file drag and drop in directive

后端 未结 2 556
孤街浪徒
孤街浪徒 2021-01-30 02:58

This example does pretty much what I would like to port in Angular-js: HTML5 File API.

I have been trying to google some example of directives however I found old exampl

2条回答
  •  清歌不尽
    2021-01-30 03:28

    Preventing default events, and getting file from original event. All can be implemented in directive. You should pass function, for work with files to attribute on-file-drop. Also 'dragging' class is added to dropzone element while dragging. In view it looks like this:

    This is my dropzone

    directive:

    function fileDropzoneDirective() {
        return {
            restrict: 'A',
            link: fileDropzoneLink
        };
        function fileDropzoneLink($scope, element, attrs) {
            element.bind('dragover', processDragOverOrEnter);
            element.bind('dragenter', processDragOverOrEnter);
            element.bind('dragend', endDragOver);
            element.bind('dragleave', endDragOver);
            element.bind('drop', dropHandler);
    
            function dropHandler(angularEvent) {
    
                var event = angularEvent.originalEvent || angularEvent;
                var file = event.dataTransfer.files[0];
                event.preventDefault();
                $scope.$eval(attrs.onFileDrop)(file);
    
            }
            function processDragOverOrEnter(angularEvent) {
                var event = angularEvent.originalEvent || angularEvent;
                if (event) {
                    event.preventDefault();
                }
                event.dataTransfer.effectAllowed = 'copy';
                element.addClass('dragging');
                return false;
            }
    
            function endDragOver() {
                element.removeClass('dragging');
            }
        }
    }
    

提交回复
热议问题