是的,有一种方法可以在不重复
x-ng-click
每个元素中的指令。您可以在AngularJS中使用事件委派来处理整行的点击事件,然后根据点击的元素有条件地执行不同的操作。
以下是如何实现它的示例:
-
将单击事件处理程序添加到
<tr>
元素:
-
在控制器或指令中,定义
handleRowClick
功能:
javascript
在
handleRowClick
函数,我们检查单击的元素是否是
<a>
标签如果是,则不执行行单击操作(
goSomewhere()
)。相反,我们让
openEditor()
函数处理链接单击操作。我们还使用
event.stopPropagation()
在
openEditor
函数,以防止行单击事件冒泡并触发行单击操作。
使用这种方法,您只需要在
<tr>
元素,并且它将处理行中的行单击和链接单击。
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.handleRowClick = function(event) {
var target = event.target;
var isLinkClicked = target.tagName.toLowerCase() === 'a';
if (!isLinkClicked) {
$scope.goSomewhere();
}
};
$scope.goSomewhere = function() {
alert('Row clicked');
};
$scope.openEditor = function(event) {
event.stopPropagation();
alert('Edit link clicked');
};
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<table>
<tr ng-app="myApp" ng-controller="myCtrl" ng-click="handleRowClick($event)">
<td>Row 1</td>
<td>Row 1</td>
<td>Row 1</td>
<td>Row 1</td>
<td>Row 1</td>
<td>Row 1</td>
<td><a href="" ng-click="openEditor($event)">edit</a></td>
</tr>
</table>