Quando ambos, os atributos href e ng-click são definidos:
<a href="#" ng-click="logout()">Sign out</a>
o href
atributo tem precedência sobre o clique do ng.
Estou procurando uma maneira de aumentar a prioridade do ng-click.
href
é necessário para o Twitter Bootstrap, não consigo removê-lo.
Respostas:
Você provavelmente deve usar apenas uma tag de botão se não precisar de um uri.
fonte
Este exemplo do site de documentação angular simplesmente funciona,
href
mesmo sem atribuí-lo a uma string vazia:http://docs.angularjs.org/api/ng.directive:select
fonte
href="#"
) causa o recarregamento da página, o que também está errado.href=""
resolve isso.<a href="javscript:void(0)" ng-click="logout()">Sign out</a>
irá atendê-lo bem tambémVocê pode simplesmente evitar o comportamento padrão do evento de clique diretamente no seu modelo.
Pela documentação angular ,
fonte
Aqui está outra solução:
ou seja, basta remover o # do atributo href
fonte
Só mais uma dica. Se precisar de um URL real (para oferecer suporte à acessibilidade do navegador), você pode fazer o seguinte:
modelo:
diretiva:
Desta forma, seu código em linkClicked () terá a chance de ser executado antes de navegar para o link
fonte
Em Angular,
<a>
s são diretivas . Assim, se você tiver um vaziohref
ou nãohref
, o Angular ligaráevent.preventDefault
.Da fonte :
Aqui está um plnkr demonstrando o
href
cenário ausente .fonte
Isso funcionou para mim no IE 9 e no AngularJS v1.0.7:
Obrigado ao comentário de duckeggs para a solução de trabalho!
fonte
Existem tantas respostas para esta pergunta aqui, mas parece que há um pouco de confusão sobre o que realmente está acontecendo aqui.
Em primeiro lugar, sua premissa
está errado. O que está realmente acontecendo é que, após o seu clique, o evento de clique é primeiro tratado pelo angular (definido pela
ng-click
diretiva no angular 1.x eclick
no angular 2.x +) e então continua a se propagar (o que eventualmente aciona o navegador para navegar até o url definido comhref
atributo). (Veja isto para mais informações sobre propagação de eventos em javascript)Se você quiser evitar isso, deverá cancelar a propagação do evento usando o método da interface The Event
preventDefault()
:(Esta é pura funcionalidade de javascript e nada a ver com angular)
Agora, isso já resolverá seu problema, mas não é a solução ideal. Angular, com razão, promove o padrão MVC . Com esta solução, seu template html é misturado com a lógica javascript. Você deve tentar evitar isso tanto quanto possível e colocar sua lógica em seu controlador angular. Então, a melhor maneira seria
E em seu método logout ():
Agora o evento click não alcançará o navegador, portanto não tentará carregar o link apontado por
href
. (No entanto, observe que se o usuário clicar com o botão direito do mouse no link e abri-lo diretamente, não haverá nenhum evento de clique. Em vez disso, ele carregará diretamente o url apontado pelohref
atributo.)Em relação aos comentários sobre a cor do link visitado nos navegadores. Novamente, isso não tem nada a ver com angular, se você
href="..."
apontar para uma url visitada pelo seu navegador por padrão, a cor do link será diferente. Isso é controlado por CSS: visitado o seletor , você pode modificar seu css para substituir este comportamento:PS1 :
Algumas respostas sugerem o uso:
href
é uma diretiva angular. Quando o seu modelo é processado pelo angular, ele será convertido paraEssas duas maneiras são essencialmente as mesmas.
fonte
Basta escrever ng-click antes de href .. Funcionou para mim
fonte
Não acho que você precise remover "#" de href. Seguindo trabalhos com Angularjs 1.2.10
fonte
Você também pode tentar isso:
fonte
Vou adicionar para você um exemplo que funciona para mim e você pode alterá-lo como quiser.
Eu adiciono o código abaixo dentro do meu controlador.
e para minha página de visualização, adiciono o código abaixo.
fonte
Você tentou redirecionar dentro da própria função de logout? Por exemplo, digamos que sua função de logout seja a seguinte
Então você pode apenas ter
fonte
Por favor, checar isto
fonte
fonte
Isso funciona para mim
fonte