Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Problema com rota do angular

Pessoal,

estou na aula 6 e não estou conseguindo configurar o angular para responder a http://localhost:8080/portfolio/#/fotos.

Consigo acessar a partial em http://localhost:8080/portfolio/partials/principal.html, mas não com http://localhost:8080/portfolio/#/fotos.

Antes de separar a tela em index e partial, o código funcionava, renderizando as imagens, permitindo filtrar etc.

Estou utilizando Spring MVC(e acho que a solução tem mais a ver com o uso do Spring MVC que do Angular), executando em um Tomcat 8.5, Angular 1.6.3.

Como faço para debugar o sistema e entender o que está acontecendo?

Seguem trechos do código. O projeto encontra-se em: https://github.com/abevieiramota/app-portfolio.

main.js

angular.module("portfolio", [ "minhasDiretivas", "ngAnimate", "ngRoute" ])
.config(function($routeProvider) {

    $routeProvider.when("/fotos", {
        templateUrl: "partials/principal.html",
        controller: "FotosController"
    });        

});

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="pt-br" ng-app="portfolio">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<title>Olha as fotos!</title>
<link rel="stylesheet" href="resources/css/bootstrap.min.css">
<link rel="stylesheet" href="resources/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="resources/css/efeitos.css">
<script type="text/javascript" src="resources/js/lib/angular.min.js"></script>
<script type="text/javascript" src="resources/js/lib/angular-animate.min.js"></script>
<script type="text/javascript" src="resources/js/lib/angular-route.min.js"></script>
<script type="text/javascript" src="resources/js/main.js"></script>
<script type="text/javascript"
    src="resources/js/directives/minhas-diretivas.js"></script>
<script type="text/javascript"
    src="resources/js/controllers/fotos-controller.js"></script>
</head>
<body>
    <div class="container">
        <div ng-view></div>
    </div>
</body>
</html>

AppWebConfiguration > servindo a pasta partials

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
        registry.addResourceHandler("/partials/**").addResourceLocations("/partials/");
    }

fotos-controller.js

angular.module("portfolio").controller("FotosController", function($scope, $http) {

    $scope.fotos = [];
    $scope.filtro = '';

    var promise = $http.get("https://api.imgflip.com/get_memes");

    promise.then(function(retorno) {

        $scope.fotos = retorno.data.data.memes;

    }).catch(function(error) {

        console.log(error);

    });

});
2 respostas

Pessoal,

criei a dúvida na metade do vídeo da aula 6. Avançando, adicionei o otherwise* e agora se acesso http://localhost:8080/portfolio/ sou encaminhado para http://localhost:8080/portfolio/#!/fotos, com a página funcionando como esperado(carregando a partial).

Se acesso http://localhost:8080/portfolio/#/fotos, sou encaminhado para http://localhost:8080/portfolio/#!/fotos#/fotos.

*

angular.module("portfolio", [ "minhasDiretivas", "ngAnimate", "ngRoute" ])
        .config(function($routeProvider) {

            $routeProvider.when("/fotos", {
                templateUrl : "partials/principal.html",
                controller : "FotosController"
            });

            $routeProvider.when("/fotos/new", {
                templateUrl : "partials/fotos.html"
            });

            $routeProvider.otherwise({
                redirectTo : "/fotos"
            });

        });
solução!

Pessoal,

pesquisando sobre o prefixo #! vi que do angular 1.5 para o angular 1.6 o prefixo das rotas do angular foi alterado de # para #!. http://stackoverflow.com/a/41551864

Acredito que o curso esteja utilizando Angular 1.5. Pontos para mim que estou usando uma versão diferente :))).

O problema todo era que eu estava tentando utilizar o prefixo da 1.5 quando estava utilizando a versão 1.6, cujo prefixo default é #!.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software