Tengo un evento de clic en una fila de la tabla y en esta fila también hay un botón Eliminar con un evento de clic. Cuando hago clic en el botón Eliminar, también se activa el evento de clic en la fila.
Aquí está mi 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>
¿Cómo puedo evitar que showUser
se active el evento cuando hago clic en el botón Eliminar en la celda de la tabla?
javascript
angularjs
angularjs-ng-click
michael_knight
fuente
fuente
ng-click
función de controlador:ng-click="deleteUser(user.id, $event)"
.$event.preventDefault()
, de lo contrario, llamar$event.stopPropagation()
me estaba redirigiendo a la raíz de mi aplicación al hacer clic en el botón.Una adición a la respuesta de Stewie. En caso de que su devolución de llamada decida si la propagación se debe detener o no, me pareció útil pasar el
$event
objeto a la devolución de llamada:Y luego, en la devolución de llamada, puede decidir si se debe detener la propagación del evento:
fuente
Escribí una directiva que le permite limitar las áreas donde un clic tiene efecto. Podría usarse para ciertos escenarios como este, por lo que en lugar de tener que lidiar con el clic caso por caso, puede decir "los clics no saldrán de este elemento".
Lo usarías así:
Tenga en cuenta que esto evitaría todos los clics en la última celda, no solo el botón. Si eso no es lo que desea, puede ajustar el botón de esta manera:
Aquí está el código de la directiva:
fuente
ngClick
, ya que en realidad nunca quiero propagar un evento ya manejado.ignoreNgClick=true
al evento y manejarlo ... de alguna manera. Idealmente, en langClick
directiva original , pero modificarlo suena sucio.En caso de que esté utilizando una directiva como yo, así es como funciona cuando necesita el enlace de dos vías de datos, por ejemplo, después de actualizar un atributo en cualquier modelo o colección:
Ahora, puede usarlo fácilmente en cualquier botón, enlace, div, etc., así:
fuente
fuente