2014-09-02 21 views
7

AngularJS’de yeniyim ve şu anki projeye biraz baskı yapıyorum.AngularJS ng-sürükle

AngularJS'nin ng-dragstart olayı olduğunu görüyorum (http://docs.ng.dart.ant.c-k.me/angular.directive/NgEventDirective.html) ama işe yaramıyor. Diğer sayfalarda diğer geliştiricilerin yeni 'direktifler' yapmayı önerdiğini görebiliyorum.

Benim sorum şu: "AngularJS içinde uygulanan yerel bir ng-sürükle functinallity var mı yoksa kendi başıma uygulamalı mıyım?"

+1

Gönderdiğiniz bağlantı Dart için değil angular.js. Angular.js, yerel sürükleme direktiflerine sahip değil. –

+0

tamam, bu ben –

cevap

7

bir tane zaten yapılmış kullanmak istemiyorsanız Kendin uygulamak gerekir. Birlikte kendim bir şey attım.

İhtiyacım olan şey, sürükleme olaylarını açısal bir bağlamda kullanmanın basit bir yoluydu. Sadece diğer sürükleme olayları ile, diğer ng-olayların aynı işlevselliğini istedim. Kaynak here'a baktım ve çoğu zaman kaynağın ng-event direktiflerini nasıl yarattığını kopyaladım.

Bağımlılık olarak ngDrag'u ekleyin. Tüm ng-drag* olaylarını kullanabilirsiniz.

(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

"null" ve "true" öğeleri "parse" için ne anlama geliyor? Angular dokümanlar tek ifade 'ifade' görüyorum: https://docs.angularjs.org/api/ng/service/$parse – ars

+0

@ars ilginç bir soru. Sadece kaynaktan kopyalandım, ama bir şeyler yapıyor gibi görünüyor: http://stackoverflow.com/questions/31053051/parse-interceptorfn-expensivechecks-arguments – jeremy

2

AngularJS için Açısal Sürükle ve Bırak özelliğini kullanabilirsiniz codef0rmer. Bu uygulamaya oldukça kolay ve sürükle özelliği için, sürükle büyüdü ve durumda

damla olaylar için açısal ve jquery geri aramalar hem sen

<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> 

Ben şahsen kullanmak ve bulunan olarak yazabiliriz destekler bu çok kolay.

Detaylar Here

+1

için aradığım cevap Evet ama benim soru için kesin cevap "sürükle 'n açılan functionit işleyen bir yerel AngularJS yönergesi yoktur ve buna ek olarak bir şey kullanmak zorundayım" - Doğru? –

+1

Evet. Ve kapsamlı manipülasyonlar için istekli iseniz, özel bir direktif kullanmalısınız. –

+0

AngularJS, sürüklenebilir için yerel yönerge sağlamaz. Bununla birlikte, belgeler, çok kullanışlı ve iyi bir başlangıç ​​noktası [basit bir kullanıcının bir öğeyi sürükleyebilmesini sağlayan bir yönerge oluşturmak] (https://docs.angularjs.org/guide) bulduğum basit bir sürüklenebilir nesne oluşturma konusunda yerel bir örnek verir./directive # create-a-directive-that-add-event-diners) – Shahar