Hay tantas respuestas para esta pregunta aquí, pero parece que hay un poco de confusión sobre lo que realmente está sucediendo aquí.
Primero, tu premisa
"href anula ng-click en Angular.js"
Está Mal. Lo que realmente está sucediendo es que después de su clic, el evento de clic es manejado primero por angular (definido por la ng-click
directiva en angular 1.xy click
en angular 2.x +) y luego continúa propagándose (lo que eventualmente hace que el navegador navegue al URL definida con href
atributo). (Consulte esto para obtener más información sobre la propagación de eventos en javascript).
Si desea evitar esto, debe cancelar la propagación del evento utilizando el método de la interfaz del eventopreventDefault()
:
<a href="#" ng-click="$event.preventDefault();logout()" />
(Esta es una funcionalidad pura de JavaScript y no tiene nada que ver con angular)
Ahora, esto ya resolverá su problema, pero esta no es la solución óptima. Angular, legítimamente, promueve el patrón MVC . Con esta solución, su plantilla html se mezcla con la lógica javascript. Debería tratar de evitar esto tanto como sea posible y poner su lógica en su controlador angular. Entonces una mejor manera sería
<a href="#" ng-click="logout($event)" />
Y en su método logout ():
logout($event) {
$event.preventDefault();
...
}
Ahora el evento de clic no llegará al navegador, por lo que no intentará cargar el enlace señalado href
. (Sin embargo, tenga en cuenta que si el usuario hace clic con el botón derecho en el enlace y lo abre directamente, no habrá ningún evento de clic. En su lugar, cargará directamente la URL señalada por elhref
atributo).
Respecto a los comentarios sobre el color del enlace visitado en los navegadores. Nuevamente, esto no tiene nada que ver con angular, si href="..."
apunta a una URL visitada por su navegador de forma predeterminada, el color del enlace será diferente. Esto está controlado por CSS: Selector visitado , puede modificar su CSS para anular este comportamiento:
a {
color:pink;
}
PS1 :
Algunas respuestas sugieren usar:
<a href .../>
href
es una directiva angular. Cuando su plantilla es procesada por angular, esta se convertirá a
<a href="" .../>
Esas dos formas son esencialmente las mismas.