Angularjs 何时何地绑定事件

Angularjs When and Where to bind events

我还在学习 Angularjs,我想在动态模板上绑定事件 我应该何时何地以 Angularjs 方式放置它?除了直接放在模板中 ng-click

//template
<div ng-repeat="person in people"><span class="person" id="{{person.id}}" >{{person.name}}</span></div>

//Jquery version
$('.person').click(function(){
  //get attribute value
  //do stuff
});

//Angular version - where should I put this
angular.element('.person').on('click', function() {
  //get attribute value
  //do stuff
});

在 AngularJS 中你应该关心 DOM 只有 在视觉组件(指令)中。在其他任何地方你都不应该知道关于 DOM 的任何事情——有哪些元素,它们是如何组成的等等。这是 Angular 中最酷的主要事情之一——你可以在不改变 JS 的情况下改变模板。

所以这种分离是这里的关键点。在 AngularJS 中,你应该将所有连接到 DOM 的东西直接放在模板中(附加事件监听器,绑定到模型等)。

但是,在指令内部,您可以将事件侦听器绑定和取消绑定到 DOM 个元素:

angular.directive('test', function() {
   return {
      restrict:'E',
      link: function(scope, element,attr) {
          element.on('click', function() { console.log(attr.value); })
      }
   }
}

但是我想建议考虑使用标准指令 (ng-click) 来处理标准事件并绑定到控制器的方法。

为您准备了代码笔。希望能回答您的问题

Codepen

HTML:

<div ng-repeat="person in people">
<span class="person" id="{{person.id}}" click>{{person.name}}</span></div>

JS:

app.directive('click', function () {
    return {
        link: function (scope, element, attrs) {
            element.bind('click', function () {
                alert('Clicked on ID : '+ attrs.id);
            });
        },
    };
});