gostaria de saber se para as rotas do angular funcionar precisa esta rodando em um servidor como nodejs, toncat e etc ? se abrir o arquivo html com as rotas configuradas ele funciona ??
gostaria de saber se para as rotas do angular funcionar precisa esta rodando em um servidor como nodejs, toncat e etc ? se abrir o arquivo html com as rotas configuradas ele funciona ??
Precisa sim. Isso porque as views parciais são carregadas via Ajax. O servidor pode ser qualquer um.
Se você não usou o modo HTML5MODE de rotas, funcionará em qualquer servidor sem alteração. Se você habilitou o HTML5MODE, você precisará alterar seu servidor para devolver sempre index.html
a qualquer resposta que seja feita que não seja para a API da aplicação. Inclusive para o erro 404. É uma exigência do HTML5MODE.
Se por acaso você esta começando e não tem muito traquejo no seu server, pode desabilitar o HTML5MODE e usar o # que não há problema nenhum. O Google usa # no gmail até hoje.
Abraço meu aluno!
entendi professor eu tinha habilitado o HTML5MODE e não alterei o servidor para devolver o index.html, vou fazer o teste e obrigado pela resposta.
Tranquilo. Primeiro, faça um teste sem o HTML5MODE, porque é o mais fácil. Depois de ver tudo funcionando, habilite novamente e tente realizar as alterações no backend que lhe falei.
Você precisa usar Angular 1 mesmo ou esta estudando apenas para se atualizar? Digo isso porque no curso de Vue.js parte1 e parte2 eu amarrei melhor essas questões. Talvez seja interessante você assistir depois só para completar seu entendimento dessa parte, pois os conceitos são os memos.
Abraço Glerison!
Flavio fiz o teste das duas formas agora quando ativo o HTML5MODE só funciona a navegação atraves dos links se eu digitar a url ele não encontra ex: url : http://localhost:3000/cliente retorna: Cannot GET /cliente
estou fazendo algo de errado?
main.js
angular.module('app', ['ngRoute', 'ngResource']) .config(function($routeProvider , $locationProvider){
$locationProvider.html5Mode(true);
$routeProvider.when('/', { templateUrl: 'partes/index.html' });
$routeProvider.when('/cliente', { templateUrl: 'partes/cliente.html' });
$routeProvider.otherwise({redirectTo: '/'});
});
console não da nenhum erro.
Você precisa retornar a página principal para URL's 404. Fez isso? Qual a lógica disso, meu aluno? É que quem deve tratar 404 ou mensagens de erro é sua aplicação Angular. O servidor não pode simplesmente devolver uma páginade 404 padrão, porque vai sumir com sua APP no lado do cliente.
fiz isso sim esta no codigo acima
$routeProvider.otherwise({redirectTo: '/'});
quando é uma url que não existe ele manda pra pagina principal mais quando tecle enter na url /cliente ele da a mensagem
Cannot GET /cliente
como se a pagina não fosse encontrada
Não é no código do Angular. Vou tentar explicar de outra forma.
Quando você digita localhost:3000/cliente
não esta usando o hash, certo? Então, o browser vai executar uma requisição para seu servidor, mas lá não existe o recurso cliente. É por isso que lá no seu server, você tem que alterá-lo e se chegar qualquer requisição para ele, ele deve devolver como resposta index.html
.
Não sei qual o server que você usa, tem que realizar essa configuração nele.
Segue um link com instruções para vários tipos de servidores:
Por fim, a boa prática é ter um servidor ou uma app para o angular e outra totalmente em separado para a API. No curso de Angular os dois estão juntos só para facilitar o aluno.
Se complicar muito, desiste do HTML5MODE. Se quiser muito muito, tem que saber como habilitar essas rotas especiais no seu server.
meu servidor é node e agora entendi perfeitamente Flavio no caso como estou enviando a requisição o angular não tem como tratar é isso? ai fica por conta do servidor que no caso temos que direcionar para a pagina principal, muito obrigado irei fazer o teste e posto aqui o resultado.
É por ai mesmo. Dá uma olhada nessa documentação que ela é muito bom. É de uma lib do Angular, mas como ela explica a esclarecer o problema eu achei bem interessante.
Funcionou direitinho Flavio obrigado.
Excelente Glerison! Esse comportamento é comum com todas as SPA que escolhem não usar o #.
Sucesso e bom estudo meu aluno!