如何在AngularJS中注册我自己的事件监听器?

Ton*_*cil 38 drag-and-drop dom-events angularjs

如何在AngularJS应用程序中注册我自己的事件监听器?

具体来说,我正在尝试注册拖放(DND)侦听器,以便在我的视图的新位置拖放某些内容时,AngularJS会重新计算业务逻辑并更新模型,然后更新视图.

Ben*_*esh 47

添加事件侦听器将在指令的链接方法中完成.下面我写了一些基本指令的例子.但是,如果你想使用jquery-ui的.draggable()和.droppable(),你可以做的是知道下面每个指令函数中的elemparam link实际上是一个jQuery对象.所以你可以打电话elem.draggable()来做你要做的事情.

这是一个使用指令绑定Angular中的dragstart的示例:

app.directive('draggableThing', function(){ 
   return {
      restrict: 'A', //attribute only
      link: function(scope, elem, attr, ctrl) {
         elem.bind('dragstart', function(e) {
            //do something here.
         });
      }
   };
});
Run Code Online (Sandbox Code Playgroud)

这是你如何使用它.

<div draggable-thing>This is draggable.</div>
Run Code Online (Sandbox Code Playgroud)

使用Angular绑定到div或某事物的示例.

app.directive('droppableArea', function() {
   return {
       restrict: 'A',
       link: function(scope, elem, attr, ctrl) {
            elem.bind('drop', function(e) {
                /* do something here */
            });
       }
   };
});
Run Code Online (Sandbox Code Playgroud)

这是你如何使用它.

<div droppable-area>Drop stuff here</div>
Run Code Online (Sandbox Code Playgroud)

我希望有所帮助.

  • 您可以而且应该在需要执行以下操作时使用指令:1.可重复使用的控件.2. DOM操作.3.事件绑定.等等 (3认同)

Dan*_*yon 8

在指令中隐藏事件处理和dom操作几乎就是angularjs方式.调用范围.$ event在事件触发时告诉angular更新视图.

您可以考虑在此示例中使用jquery-ui (请参阅 我使用angular-ui的示例的角度wiki,并且您可能会发现一个简单的事件包装器.