除了一个单元格及其边缘有角度外,如何使整行可单击?

dei*_*tch 16 angularjs

假设我有一行看起来像

<tr>
  <td>John</td>
  <td>Smith</td>
  <td>Approved?<input type="checkbox"/></td>
</tr>
Run Code Online (Sandbox Code Playgroud)

每行显示一名员工,并允许您检查批准/拒绝员工(例如,注册课程).我希望用户能够点击该行的任何位置以获得有关该员工的更多详细信息,但如果他们点击最后一列("已批准?"),则不应该更详细,因为它应该只是更改复选框.

以下是我所知道的解决方案,没有一个是伟大的:

  1. 整行:<tr class="clickable" ng-click="go()">.使所有单元格和边距可单击,并且只需要一个ng-click条目,但是复选框会导致"go()"执行,这很糟糕.
  2. 每个细胞:<td class="clickable" ng-click="go()">...<td class="clickable" ng-click="go()">.Pro:可以限制我想要的细胞.骗局:很多重复(不是干),并且错过了边距.
  3. 整行有特殊的"go"fn : <tr class="clickable" ng-click="go()">,但"go"知道如何区分不同的单元格.亲:确切有效果.Con:在专门的控制器动作中需要大量的视图/ html知识.

如何才能使前2列及其边距可以点击,而不是第3列或其边距?

Che*_*niv 17

您可以使用两个点击处理程序,一个用于整个tr,第二个用于最后一个td"复选框".在第二次使用EventstopPropagation方法.

控制器:

var TableCtrl = function($scope){
    $scope.click1 = function(){
        console.log("Click 1 method")
    }
    $scope.click2 = function(e){
        console.log("Click 2 method");
        e.stopPropagation();
    }
}
Run Code Online (Sandbox Code Playgroud)

标记:

<table ng-controller="TableCtrl">
<tr ng-click="click1()">
  <td>John</td>  <td>Smith</td>
  <td>Approved?<input type="checkbox" ng-click="click2($event)"/></td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)

工作示例:http://jsfiddle.net/zDMQB/1/