How do I register my own event listeners in an AngularJS app?
To be specific, I am trying to register Drag and Drop (DND) listeners so that when something is dragged and dropped in a new location of my view, AngularJS recalculates the business logic and updates the model and then the view.
The $ in AngularJs is a built-in object.It contains application data and methods.
The ngOn directive adds an event listener to a DOM element via angular. element(). on(), and evaluates an expression when the event is fired.
The maximum number of event listeners that can be attached to the event can be set by the setMaxListeners function and the default value is 10.
In Angular 8, event binding is used to handle the events raised by the user actions like button click, mouse movement, keystrokes, etc. When the DOM event happens at an element(e.g. click, keydown, keyup), it calls the specified method in the particular component.
Adding an event listener would be done in the linking method of a directive. Below I've written some examples of basic directives. HOWEVER, if you wanted to use jquery-ui's .draggable() and .droppable(), what you can do is know that the elem
param in the link
function of each directive below is actually a jQuery object. So you could call elem.draggable()
and do what you're going to do there.
Here's an example of binding dragstart in Angular with a directive:
app.directive('draggableThing', function(){ return { restrict: 'A', //attribute only link: function(scope, elem, attr, ctrl) { elem.bind('dragstart', function(e) { //do something here. }); } }; });
Here's how you'd use that.
<div draggable-thing>This is draggable.</div>
An example of binding drop to a div or something with Angular.
app.directive('droppableArea', function() { return { restrict: 'A', link: function(scope, elem, attr, ctrl) { elem.bind('drop', function(e) { /* do something here */ }); } }; });
Here's how you'd use that.
<div droppable-area>Drop stuff here</div>
I hope that helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With