angular.js - 处理控制器内部点击的最简单方法

时间:2015-06-22 15:33:35

标签: javascript jquery html angularjs

有没有更好的方法来处理控制器内的点击?

<div ng-controller="SomeController>
  <a href="/#!/something" ng-click="doTheSame()">link1</a>
  <a href="/#!/something" ng-click="doTheSame()">link2</a>
  <a href="/#!/something" ng-click="doTheSame()">link3</a>
  ..
  <a href="/#!/something" ng-click="doTheSame()">link99</a>
</div>

在jQuery中我会做类似的事情:

$('div > a').on('click', function() {
  // do some stuff
});

1 个答案:

答案 0 :(得分:3)

你真的不想处理控制器中的任何DOM内容(控制器只是将数据绑定到视图,这恰好是DOM)。

您希望使用指令进行DOM操作。 (但是,是的,ng-click是一个可以在控制器内运行方法的内置指令。)

如果您想对元素添加一些行为,可以执行以下操作:

myApp.directive('myDirective', myDirective);

myDirective.$inject = ['whateverService'];

function myDirective(whateverService) {
    var d = {
        restrict: 'A',
        link: link
    };

    return d;

    function link(scope, $el, attrs) {
        $el.on('click', doSomething);

        function doSomething() { /* ... */ }
    }
}

HTML:

<div myDirective></div>

有关详细信息,请参阅John Papa's style guide

您可以拥有多个这些指令,甚至可以传入数据:

<div myDirective="first-link">First</div>
<div myDirective="second-link">Second</div>
<!-- etc. -->