I have a click Event on a table row and in this row there is also a delete Button with a click Event. When i click the delete button the click Event on the row is also fired.
Here is my code.
<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>
How can I prevent that the showUser
Event is fired when i click the delete Button in the table cell?
In case that you're using a directive like me this is how it works when you need the two data way binding for example after updating an attribute in any model or collection:
Now, you can easily use it in any button, link, div, etc. like so:
ngClick directive (as well as all other event directives) creates
$event
variable which is available on same scope. This variable is a reference to JSevent
object and can be used to callstopPropagation()
:PLUNKER
An addition to Stewie's answer. In case when your callback decides whether the propagation should be stopped or not, I found it useful to pass the
$event
object to the callback:And then in the callback itself, you can decide whether the propagation of the event should be stopped:
I wrote a directive which lets you limit the areas where a click has effect. It could be used for certain scenarios like this one, so instead of having to deal with the click on a case by case basis you can just say "clicks won't come out of this element".
You would use it like this:
Keep in mind that this would prevent all clicks on the last cell, not just the button. If that's not what you want you may want to wrap the button like this:
Here is the directive's code: