有没有更好的方法来处理控制器内的点击?
<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
});
答案 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. -->