2017-08-25 2 views
0

Ich habe die sortierbare Komponente von UIKit in meiner Website verwendet. Ich habe es funktioniert und jetzt werde ich das Ereignis verwenden, um etwas auszuführen, wenn ich ein Symbol bewege. Das Ereignis heißt change.uk.sortable.Wie UIKit Ereignis in AngularJs auszuführen

Mit jQuery können Sie es nennen von:

$(document).ready(function() { 
    $("#sample").on("change.uk.sortable", function() { 


    }); 
}); 

Wie kann ich etwas tun in AngularJS?

+0

ohne jQuery sein:. 'Document.getElementById ('Probe') addEventListener ('change.uk.sortable', function() {...})' –

+0

@IvanMinakov: Ich möchte AngularJS verwenden. – Stuart

Antwort

1

Sie können entweder eine Direktive verwenden (was mehr die AngularJS-Methode ist), oder da Sie jQuery für uiKit einschließen müssen, können Sie einfach jQuery verwenden, wie in Ihrer Frage.

In beiden Fällen müssen Sie in eine $scope.apply()-Funktion umbrechen, wenn Sie die Bereichseigenschaften aktualisieren möchten.

Richtlinie Version:

var app = angular.module('App', []); 

app.controller('AppCtrl', function($scope) {  
    $scope.movedItemDirectiveVersion = "No item has been moved yet...";  
}); 

app.directive("mySortable", function() { 
    return { 
    restrict: 'A', 
    link: function(scope, elem, attrs) { 
     elem.on('change.uk.sortable.mySortable', function(event, sortableObj, element, action) { 
     scope.$apply(function() { 
      scope.movedItemDirectiveVersion = "You moved " + element[0].innerText; 
     }); 
     }); 
     // clean up when scope is destroyed 
     scope.$on("$destroy", 
     function() { 
      elem.off("change.uk.sortable.mySortable"); 
     } 
    ); 
    } 
    } 
}); 
<ul class="uk-sortable uk-grid uk-grid-small uk-grid-width-1-5" data-uk-sortable="" my-sortable> 
    <li class="uk-grid-margin" style=""> 
    <div class="uk-panel uk-panel-box">Item 1</div> 
    </li> 
    <li class="uk-grid-margin" style=""> 
    <div class="uk-panel uk-panel-box">Item 2</div> 
    </li> 
</ul> 

Nicht-Richtlinie Version:

var app = angular.module('App', []); 

app.controller('AppCtrl', function($scope) { 
    $scope.movedItem = "No item has been moved yet..."; 

    $('#withoutDirective').on("change.uk.sortable", function(event, sortableObj, element, action) { 
    $scope.$apply(function() { 
     $scope.movedItem = "You moved " + element[0].innerText; 
    }); 
    }); 
}); 
<ul id="withoutDirective" class="uk-sortable uk-grid uk-grid-small uk-grid-width-1-5" data-uk-sortable=""> 
    <li class="uk-grid-margin" style=""> 
    <div class="uk-panel uk-panel-box">Item 1</div> 
    </li> 
    <li class="uk-grid-margin" style=""> 
    <div class="uk-panel uk-panel-box">Item 2</div> 
    </li> 
</ul> 

Demo für beide Versionen: http://jsfiddle.net/s9fr43of/1/

+0

Hallo, das ist schon OK. Kann ich aber bitte nur einen Code anfordern. Ich möchte auch wissen, wo ich das Symbol ablege, damit ich die neue Anordnung der Datenbank aktualisieren kann. Vielen Dank im Voraus. – Stuart

+0

Sehen Sie sich die Funktion 'saveOrdering' in https://codepen.io/malles/pen/pvLOyb für die Grundidee an –