Как сделать целую строку нажатой, за исключением одной ячейки и ее полей в angular?
Скажем, у меня есть строка, которая выглядит как
<tr>
<td>John</td>
<td>Smith</td>
<td>Approved?<input type="checkbox"/></td>
</tr>
Каждая строка показывает одного сотрудника и позволяет проверить, одобряет/отклоняет сотрудника (например, для регистрации для курса). Я хочу, чтобы пользователь мог щелкнуть в любом месте строки, чтобы получить более подробную информацию о сотруднике, но если они нажмут на последний столбец ( "Approved?" ), Он не должен идти более подробно, так как он должен просто изменить флажок.
Вот те решения, о которых я знаю, никто не велик:
- Целая строка:
<tr class="clickable" ng-click="go()">
. Делает все ячейки и поля доступными для кликов и требует только одну запись ng-click
, но при этом флажок вызывает "go()", что плохо.
- Каждая ячейка:
<td class="clickable" ng-click="go()">...<td class="clickable" ng-click="go()">
. Pro: может ограничивать только те ячейки, которые я хочу. Con: много повторений (не DRY) и пропускает поля.
- Целая строка со специальным "go" fn:
<tr class="clickable" ng-click="go()">
, но "go" знает, как различать разные ячейки. Pro: Имеет точно эффект. Con: требуется много знаний view/html в специализированном действии контроллера.
Как я могу сделать первые 2 столбца и их поля кликабельными, но не третьими или полями?
Ответы
Ответ 1
Вы можете использовать два обработчика кликов, один для целого tr
, второй для последнего td
'. Во втором используйте метод Event
stopPropagation
.
Контроллер:
var TableCtrl = function($scope){
$scope.click1 = function(){
console.log("Click 1 method")
}
$scope.click2 = function(e){
console.log("Click 2 method");
e.stopPropagation();
}
}
Разметка:
<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>
Рабочий пример: http://jsfiddle.net/zDMQB/1/
Ответ 2
Как насчет этого?
<tr>
<td style="cursor: pointer;" ng-click="alert('hello1')">John</td>
<td style="cursor: pointer;" ng-click="alert('hello2')">Smith</td>
<td>Approved?<input type="checkbox"/></td>
</tr>