Suponha que você esteja usando rotas:
// bootstrap
myApp.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
$routeProvider.when('/home', {
templateUrl: 'partials/home.html',
controller: 'HomeCtrl'
});
$routeProvider.when('/about', {
templateUrl: 'partials/about.html',
controller: 'AboutCtrl'
});
...
E no seu html, você deseja navegar para a página sobre quando um botão é clicado. Uma maneira seria
<a href="#/about">
... mas parece que o ng-click também seria útil aqui.
- Essa suposição está correta? Esse ng-click é usado em vez de âncora?
- Se sim, como isso funcionaria? IE:
<div ng-click="/about">
angularjs
routes
angularjs-routing
angularjs-ng-click
angularjs-ng-route
Robert Christian
fonte
fonte
Respostas:
As rotas monitoram o
$location
serviço e respondem a alterações no URL (geralmente por meio do hash). Para "ativar" uma rota, basta alterar o URL. A maneira mais fácil de fazer isso é com tags de âncora.Nada mais complicado é necessário. Se, no entanto, você deve fazer isso a partir do código, a maneira correta é usar o
$location
serviço:Que, por exemplo, um botão pode acionar:
fonte
path
ehash
serve a dois propósitos diferentes, mas, dependendo das circunstâncias, pode ter o mesmo efeito. Na maioria dos casos, para roteamento estrito (especialmente comhtml5mode
ativado),path
será a escolha canônica. Eu atualizei a resposta para refletir isso./
. Se você estiver veiculando o aplicativo/app/index.html
, isso não funcionará porque o URL absoluto é/app/next.html
. Obviamente, também, o servidor deve estar configurado para retornar seuindex.html
arquivo quando for atingido/next.html
. Sinta-se livre para postar um Plunker / Fiddle se você quiser que eu dê uma olhada.go
método a cada controlador? (Ou criar um controlador de raiz com umgo
método?)<button click-go="/home">Click</button>
. A função de link seria apenas esta:element.on("click", function () { $location.path(attrs.clickGo); });
Aqui está uma ótima dica que ninguém mencionou. No controlador em que a função está, você precisa incluir o provedor de localização:
fonte
Usar um atributo personalizado (implementado com uma diretiva) talvez seja a maneira mais limpa. Aqui está a minha versão, com base nas sugestões de @ Josh e @ sean.
Ele tem alguns recursos úteis, mas eu sou novo no Angular, então provavelmente há espaço para melhorias.
fonte
clickLink
atributo for alterado, a diretiva adicionará o novo manipulador de cliques, mas deixará o antigo no lugar. O resultado pode ser um pouco caótico. Originalmente, escrevi isso para usar em uma situação em que oclickLink
atributo nunca mudaria, por isso nunca amarrei esse final. Eu acho que corrigir esse bug seria realmente levar a código mais simples - eu poderia tentar fazê-lo quando eu tiver tempo (ha!)attrs.$observe
estava lá. Obrigado por suas sugestões.Lembre-se de que se você usar o ng-click no roteamento, não poderá clicar com o botão direito do mouse no elemento e escolher 'abrir em nova guia' ou clicar com a tecla Ctrl pressionada no link. Eu tento usar o ng-href quando se trata de navegação. É melhor usar o ng-click nos botões para operações ou efeitos visuais, como o recolhimento. Mas sobre eu não recomendaria. Se você alterar a rota, poderá ser necessário alterar muitas inserções no aplicativo. Tenha um método retornando o link. ex: Sobre. Esse método que você coloca em um utilitário
fonte
Eu usei a
ng-click
diretiva para chamar uma função, ao solicitar a rota templateUrl, para decidir qual<div>
deve sershow
ouhide
dentro da página templateUrl da rota ou para diferentes cenários.AngularJS 1.6.9
Vamos ver um exemplo, quando na página de roteamento, preciso adicionar
<div>
ou editar<div>
, que eu controle usando os modelos de controlador pai$scope.addProduct
e$scope.editProduct
booleano.RoutingTesting.html
TestingPage.html
ambas as páginas -
RoutingTesting.html
(pai),TestingPage.html
(página de roteamento) estão no mesmo diretório,Espero que isso ajude alguém.
fonte
Outra solução, mas sem usar o ng-click, que ainda funciona mesmo para outras tags além de
<a>
:Dessa forma, você também pode passar parâmetros para sua rota: https://stackoverflow.com/a/40045556/838494
(Este é o meu primeiro dia com angular. Feedback gentil é bem-vindo)
fonte
Você pode usar:
Se você quiser alguma variável dinâmica dentro do href, faça o seguinte:
Onde link é variável de escopo angular.
fonte
ng-click
para alterar o local.basta fazer o seguinte em sua gravação em html:
E no seu controlador, adicione $ state da seguinte maneira:
fonte