AngularJS ng-drag

时间:2014-09-02 10:34:33

标签: angularjs drag-and-drop angularjs-directive

我是AngularJS的新手,我对当前的项目有点压力,这就是我在这里问的原因。

我看到AngularJS有ng-dragstart事件(http://docs.ng.dart.ant.c-k.me/angular.directive/NgEventDirective.html),但它似乎不起作用。在其他页面上,我可以看到其他开发人员建议执行新的指令'。

所以我的问题是:"是否在AngularJS中实现了本地ng-drag功能,还是我自己应该实现?"

2 个答案:

答案 0 :(得分:9)

如果您不想使用已经制作过的,您需要自己实施。我自己把一些东西扔了。

我需要的是在角度上下文中使用拖动事件的简单方法。我想要与其他ng-events完全相同的功能,只需要拖动事件。我查看了源here,并且大部分都复制了源如何创建ng-event指令。

包含ngDrag作为依赖项。您可以使用所有ng-drag*个活动。

(function(){
    var ngDragEventDirectives = {};

    angular.forEach(
        'drag dragend dragenter dragexit dragleave dragover dragstart drop'.split(' '),
        function(eventName) {
            var directiveName = 'ng' + eventName.charAt(0).toUpperCase() + eventName.slice(1);

            ngDragEventDirectives[directiveName] = ['$parse', '$rootScope', function($parse, $rootScope) {
                return {
                    restrict: 'A',
                    compile: function($element, attr) {
                        var fn = $parse(attr[directiveName], null, true);

                        return function ngDragEventHandler(scope, element) {
                            element.on(eventName, function(event) {
                                var callback = function() {
                                    fn(scope, {$event: event});
                                };

                                scope.$apply(callback);
                            });
                        };
                    }
                };
            }];
        }
    );

    angular
        .module('ngDrag', [])
        .directive(ngDragEventDirectives);
}());

答案 1 :(得分:2)

您可以通过codef0rmer对AngularJS使用Angular Drag and Drop。它非常容易实现,并且支持对拖放中引发的事件进行angular和jquery回调

在您的情况下,对于拖动功能,您可以将其写为

<div class="btn btn-primary" data-drag="true" data-jqyoui-options="{revert: 'invalid'}" ng-model="list1" jqyoui-draggable="{animate:true}" ng-hide="!list1.title">{{list1.title}}</div>

我个人使用它并发现它很容易。

更多详情Here