Eu tenho um evento de clique em uma linha da tabela e nessa linha também há um botão de exclusão com um evento de clique. Quando clico no botão Excluir, o clique em Evento na linha também é acionado.
Aqui está o meu código.
<tbody>
<tr ng-repeat="user in users" class="repeat-animation" ng-click="showUser(user, $index)">
<td>{{user.firstname}}</td>
<td>{{user.lastname}}</td>
<td>{{user.email}}</td>
<td><button class="btn red btn-sm" ng-click="deleteUser(user.id, $index)">Delete</button></td>
</tr>
</tbody>
Como impedir que o showUser
evento seja acionado quando clico no botão excluir na célula da tabela?
javascript
angularjs
angularjs-ng-click
michael_knight
fonte
fonte
ng-click
função de manipulador:ng-click="deleteUser(user.id, $event)"
.$event.preventDefault()
, caso contrário, a chamada$event.stopPropagation()
estava me redirecionando para a raiz do meu aplicativo ao clicar no botão.Uma adição à resposta de Stewie. Caso seu retorno de chamada decida se a propagação deve ou não ser interrompida, achei útil passar o
$event
objeto para o retorno de chamada:E então, no próprio retorno de chamada, você pode decidir se a propagação do evento deve ser interrompida:
fonte
Eu escrevi uma diretiva que permite limitar as áreas em que um clique tem efeito. Pode ser usado para certos cenários como este, então, em vez de precisar lidar com o clique caso a caso, basta dizer "os cliques não sairão desse elemento".
Você usaria assim:
Lembre-se de que isso impediria todos os cliques na última célula, não apenas o botão. Se não é isso que você deseja, você pode apertar o botão assim:
Aqui está o código da diretiva:
fonte
ngClick
, pois na verdade nunca quero propagar um evento já tratado.ignoreNgClick=true
ao evento e manipulá-la ... de alguma forma. Idealmente, nangClick
diretiva original , mas modificá-lo parece sujo.Caso você esteja usando uma diretiva como eu, é assim que funciona quando você precisa da ligação de duas vias de dados, por exemplo, após atualizar um atributo em qualquer modelo ou coleção:
Agora, você pode usá-lo facilmente em qualquer botão, link, div, etc., assim:
fonte
fonte